Tôi đã cố gắng thiết lập một công việc cron gốc để chạy tập lệnh Bash với quyền root, để chạy vào phút 7,37, mỗi giờ, mỗi ngày trong tháng, mỗi tháng. Kịch bản này được đặt trong /usr/bin
và được đặt tên tunlrupdate.sh
. Nó cập nhật DNS của Tunlr.
$ ls -l /usr/bin/tunlrupdate.sh
-rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
Kịch bản Bash này có sẵn ở đây .
Khi được gọi, kịch bản ghi những gì xảy ra trong một bản ghi nằm ở /var/log/tunlr.log
Để thêm công việc cron gốc này, tôi đã sử dụng tiêu chuẩn cho crontab của root
sudo crontab -e
Và chèn 2 dòng này vào cuối. Tôi hy vọng cron chạy script như root.
# check for updated Tunlr DNS every 30 minutes at the hour + 7 mn and hour + 37 mn
07,37 * * * * root /usr/bin/tunlrupdate.sh
Một lệnh sau đó sudo crontab -l
xác nhận rằng công việc cron đã được chèn.
Tôi đã khởi động lại Ubuntu và đang kiểm tra tệp nhật ký nếu công việc định kỳ được khởi chạy đúng cách. Tuy nhiên không có gì trong logfile /var/log/tunlr.log
có nghĩa là công việc chưa bao giờ được khởi chạy thành công.
Tôi đã kiểm tra xem nếu tôi chạy tập lệnh từ dòng lệnh
sudo /usr/bin/tunlrupdate.sh
sau đó logfile được cập nhật tương ứng.
Tại sao công việc định kỳ này không chạy theo kế hoạch trong hệ thống của tôi?
CẬP NHẬT 1: Tất cả các giải pháp đề xuất cho đến nay không hoạt động. Tôi cảm ơn Olli vì CLI để liệt kê nhật ký hệ thống sudo grep CRON /var/log/syslog
. Tuy nhiên tôi đã nhận được một lỗi CRON
CRON[13092]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php
/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
với PATH được đề xuất = chèn và sử dụng đường dẫn tuyệt đối từ gốc cho các hàm trong tập lệnh hoặc không có giải pháp được đề xuất này ở đây. Tôi vẫn nhận được lỗi này.
Sau khi tìm kiếm, tôi xác định chính xác lỗi trong tệp /usr/lib/php5/maxlifetime
như được giải thích ở đây :Change #!/bin/sh -e --> #!/bin/sh -x
Sau đó liệt kê nhật ký lỗi CRON trong hệ thống của tôi
sudo grep CRON /var/log/syslog
Feb 11 18:07:01 Marius-PC CRON[14067]: (root) CMD (root /usr/bin/tunlrupdate.sh)
Feb 11 18:07:01 Marius-PC CRON[14066]: (root) MAIL (mailed 1 byte of output; but got
status 0x00ff, #012)
Tôi vẫn không nhận được tập lệnh bash. Lần này không có lỗi được hiển thị trong nhật ký. Để đảm bảo đây không phải là nội dung của tập lệnh, tôi đã giảm tập lệnh thành 3 dòng sau:
#!/bin/bash
LOGFILE=/var/log/tunlr.log
echo $LOGFILE >> $LOGFILE
Tôi vẫn không nhận được công việc định kỳ thông qua. Không có gì được ghi trong tệp nhật ký. Vì vậy, thậm chí có thể là một tập lệnh trống sẽ không chạy trong cron? Tôi không hiểu Tôi biết việc thử một tập lệnh giảm xuống còn 2 dòng này:
#!/bin/bash
exit 0
Và vẫn là nhật ký lỗi tương tự. Kịch bản cron không đi qua ...