Làm thế nào để thực thi shell script thông qua crontab?


22

Tôi có một notify.shkịch bản giống như:

notify-send "hi welcome"

Thông báo crontab của tôi cho 2 giờ chiều:

0 14 * * * home/hacks/notify.sh

Tuy nhiên, điều này không hoạt động. Vấn đề là gì?

Câu trả lời:


39

Kịch bản của bạn bị thiếu #! dòng lúc bắt đầu, đó là phép thuật được giải thích bởi kernel để nói trình thông dịch lệnh nào sẽ được sử dụng cho tập lệnh.

Làm cho nó trông như thế này:

#!/bin/sh
notify-send "hi welcome"

và đảm bảo tập lệnh có thể thực thi được:

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

Ngoài ra, vì bạn đang yêu cầu điều này xảy ra chỉ một lần một ngày, múi giờ của crontab có giống với múi giờ của chính bạn không? Bạn có thể thấy điều này xảy ra lúc 2 giờ chiều GMT.


+1 Câu trả lời này thật tuyệt vời - đặc biệt lưu ý điểm về kịch bản cần được thực thi! Cảm ơn!
FXQuantTrader

Giải thích rất tinh tế.
Upvote

18

Làm crontab chạy chỉ dễ dàng. Ở đây tôi sẽ nói làm thế nào để chạy các công việc crontab. Nó rất hữu ích cho bất cứ ai bị mắc kẹt trên crontab.

*/1 * * * * cd /home/hacks && sh notify.sh

Để làm cho kịch bản có thể thực thi được, chúng ta phải làm:

chmod +x home/hacks/notify.sh

Ở đây tôi chạy tập lệnh này cứ sau một phút ... Bằng cách thực hiện tập lệnh bên dưới, bạn có thể viết tập lệnh đó vào một tệp nhật ký để tìm xem nó có hoạt động không

viết nhật ký

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

gửi thư

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com

2
không phải là "* / 1 * * * * sh /home/hacks/notify.sh" cũng sẽ hoạt động chứ?
dùng1179459

5

4 giả thuyết:

  • daemon cron không chạy (làm một ps axfww | grep cronvà kiểm tra)

  • gửi thông báo đang cố gửi đầu ra đến một thiết bị đầu cuối hoặc phiên X - nhưng nó được chạy từ bên trong cronmôi trường và nó không biết "nói chuyện với ai", có thể nói như vậy.

  • kịch bản của bạn không được thực thi

  • các home/đường dẫn trong kịch bản crontab là tương đối cho người sử dụng các kịch bản được thực hiện như. Hãy thử sử dụng đường dẫn đầy đủ


1

Thêm export DISPLAY=:0phía trên dòng thông báo gửi trong tập lệnh của bạn. Điều này giải quyết điểm thứ hai của lornezog.


0

Bạn phải mở crontab bằng lệnh sau:

crontab -u username -e (to edit) -l(to list) -r(to remove) 10(minutes) 8-15(hours) *(Day of month) *(month) 1,3,5(days of week) /path/to/script/script_name.sh

Điều này sẽ chạy tập lệnh của bạn mỗi giờ một lần từ 8 giờ sáng đến 3 giờ sáng lúc 10 phút mỗi giờ vào thứ Hai, thứ Tư và thứ Sáu.


0

Trước hết, chúng ta cần chỉnh sửa crontab bằng Command crontab -evà hơn Bên trong này Crontabthêm đoạn script Đường dẫn thực thi và trong Trường hợp của bạn như thế này * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Bắt đầu / Dừng / khởi động lại dịch vụ cron

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl dừng crond.service


-2

khá đơn giản, thêm dòng sau vào cuối tệp crontab qua: sudo nano /etc/crontab

@reboot root cd /home/pi/node-sonos-http-api && npm start &


Đây dường như không phải là một câu trả lời cho câu hỏi.
Ljm Dullaart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.