Как я могу определить, выполнено ли мое почасовое задание cron?

Я создал файл под названием ntpdate в /etc/cron.hourly

#!/bin/sh/usr/sbin/ntpdate-debiandate > /tmp/william_tmpdate > /william_tmpdate > ~/william_tmpecho test

Я также сделал Chmod 755 для этого файла.

Однако я не могу сказать, был ли файл запущен или нет!

Файл не создан ни в одном из 3 каталогов.

Если я вручную запущу cd / && run-parts --report /etc/cron.hourly затем файлы создаются, и я получаю эхо-сигнал.

Может ли кто-нибудь порекомендовать (в идеале пошаговые!) инструкции для проверки того, что он работает?

Вам следует заглянуть в свой /var/log/syslog файл журнала. Если бы cron был запущен, у него была бы строка типа:

Jun 11 19:09:01 penguin CRON[17376]: (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/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Советы по устранению неполадок см. в разделе https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems

Одним из основных недостатков cron является то, что cron работает в чрезвычайно ограниченной среде оболочки, в результате чего многие переменные не экспортируются в среду, в основном $PATH. Убедитесь, что вы используете все абсолютные пути к исполняемому файлу, включая общие функции, такие как echo, uptime, date, и т.д. Все должны использовать полные пути (/bin/echo, /bin/date, /usr/bin/uptime). Чтобы определить путь к исполняемому файлу, вы можете использовать which команда вроде так: which echo - это покажет вам полный путь к этому инструменту.

Попробуйте изменить первую строку вашего скрипта (интерпретатора) на:

#!/bin/bash

В прошлом у меня также были проблемы с переменными среды и ПУТЯМИ. После изменения интерпретатора на bash мои проблемы исчезли.

Учитывая, что я добавил clearme.sh сценарий в /etc/cron.hourly/

Просто отфильтруйте задачи CRON в терминал с могущественными эгреп и awk:

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

Результат будет выглядеть следующим образом:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Чтобы объяснить все шаг за шагом:

  1. cat /var/log/системный журнал - распечатай мне системный журнал
  2. egrep clearme - но выделяйте только те строки, которые содержат текст очистите меня
  3. awk "{ print $1 }" - выведите мне ту строку, которая содержит текст очистите меня
  4. > ~/Desktop/cronlog.txt - вывод результатов в файл cronlog.txt расположенный на Рабочий стол каталог.

4-й шаг является необязательным. Он просто напечатает результаты в терминале вместо файла.