Я попытался настроить корневое задание cron для запуска скрипта Bash от имени root, для запуска в минуту 7,37, каждый час, каждый день месяца, каждый месяц. Этот скрипт находится в /usr/bin
и названный tunlrupdate.sh
. Он обновляет DNS Tunlr.
$ ls -l /usr/bin/tunlrupdate.sh -rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
Этот скрипт Bash доступен здесь.
При вызове скрипт записывает происходящее в журнал, расположенный в /var/log/tunlr.log
Чтобы добавить это задание root cron, я использовал стандарт для crontab root
sudo crontab -e
И вставил эти 2 строки в конце. Я ожидаю, что cron запустит скрипт от имени root.
# check for updated Tunlr DNS every 30 minutes at the hour + 7 mn and hour + 37 mn07,37 * * * * root /usr/bin/tunlrupdate.sh
Более поздняя команда sudo crontab -l
подтверждено, что задание cron было вставлено.
Я перезагрузил Ubuntu и проверял в файле журнала, правильно ли запущено задание cron. Однако в файле журнала ничего нет /var/log/tunlr.log
это означает, что задание так и не было успешно запущено.
Я проверил, что если я запущу скрипт из командной строки
sudo /usr/bin/tunlrupdate.sh
затем файл журнала обновляется соответствующим образом.
Почему это задание cron в моей системе выполняется не так, как планировалось?
ОБНОВЛЕНИЕ 1 : Все предложенные решения пока не работают. Я благодарю Олли за CLI для отображения системного журнала sudo grep CRON /var/log/syslog
. Однако я получил ошибку 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)
с предлагаемым ПУТЕМ = вставка и использование абсолютного пути от корня для функций в скрипте или без этого предлагаемого решения здесь. Я все еще получаю эту ошибку.
После некоторых поисков я точно определил ошибку в файле /usr/lib/php5/maxlifetime
как объясняется здесь: Change #!/bin/sh -e --> #!/bin/sh -x
Затем перечислите журнал ошибок CRON в моей системе
sudo grep CRON /var/log/syslogFeb 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 gotstatus 0x00ff, #012)
Я все еще не получаю выполнения сценария bash. На этот раз ошибка в журнале не отображается. Чтобы убедиться, что это не было содержанием скрипта, я сократил сценарий до следующих 3 строк:
#!/bin/bashLOGFILE=/var/log/tunlr.logecho $LOGFILE >> $LOGFILE
Я все еще не справляюсь с работой cron. В файле журнала ничего не записано. Так что даже, может быть, пустой скрипт не будет запускаться в cron? Я этого не понимаю. Я знаю, что пытаюсь создать сценарий, сведенный к этим 2 строкам:
#!/bin/bashexit 0
И все тот же журнал ошибок. Сценарий cron не проходит ...