một cron trong một TZ khác
Bạn có thể thử thiết lập biến CRON_TZ
thay vì TZ
. Các tùy chọn này dường như là distro cụ thể. Tôi đã xem các trang hướng dẫn man 5 crontab
sau ( sau đó tìm kiếm TZ
) cho cả Fedora và Ubuntu.
Fedora có nó như CRON_TZ=IST
trong khi Ubuntu tuyên bố như thế này:
Trình nền cron chạy với múi giờ xác định. Nó hiện không hỗ trợ múi giờ cho mỗi người dùng. Tất cả các tác vụ: hệ thống và người dùng sẽ được chạy dựa trên múi giờ được định cấu hình. Ngay cả khi người dùng chỉ định biến môi trường TZ trong crontab của mình, điều này sẽ chỉ ảnh hưởng đến các lệnh được thực thi trong crontab, chứ không phải chính việc thực thi các tác vụ crontab.
Trang người đàn ông của Fedora nói rằng nó như thế này:
Biến CRON_TZ chỉ định múi giờ cụ thể cho bảng cron. Người dùng nên nhập thời gian theo múi giờ đã chỉ định vào bảng. Thời gian được sử dụng để ghi vào tệp nhật ký được lấy từ múi giờ địa phương, nơi trình nền đang chạy.
Với bạn trên Ubuntu tôi không mong đợi nó hoạt động nhưng nó có thể. Tôi đã kiểm tra trên Ubuntu 12.10.
Hãy thử một cái gì đó như thế này:
#m h d m wday command
CRON_TZ=IST
5 0,6,12,18 * * * /path/to/script.bash
Tất cả các crons trong một TZ khác nhau
Tuy nhiên, nếu bạn đang nhắm đến việc chạy tất cả các con quỷ của mình trong một múi giờ khác, bạn có thể thực hiện chiến thuật ấn tượng hơn là thay đổi TZ
chính cron daemon. Một cái gì đó như thế này trong kịch bản dừng / bắt đầu:
# /etc/init.d/crond
...
...
# Source function library.
. /etc/rc.d/init.d/functions
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
export TZ=IST
start() {
if [ $UID -ne 0 ] ; then
echo "User has insufficient privilege."
exit 4
fi
[ -x $exec ] || exit 5
[ -f $config ] || exit 6
echo -n $"Starting $prog: "
daemon $prog $CRONDARGS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
}
...
...
Đây là mã từ tập lệnh dừng / khởi động Fedora crond của tôi nhưng một thay đổi tương tự có thể được thực hiện đối với tập lệnh dừng / khởi động Ubuntu của bạn cho crond.