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

26

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

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

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

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

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

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

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

wilhil
источник

Ответы:

25

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

Марко Чеппи
источник
Как уже говорилось в чате, спасибо за это, и я действительно надеюсь, что это поможет кому-то еще ... Хотя я и сделал путь к ntpdate, я настолько привык к тому, что Windows и echo / date просто «встроены», я просто не Не думаю, что мне нужен полный путь ... узнать больше о Linux, и это имеет смысл!
wilhil
36

Вы должны посмотреть в свой /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#Troublesho__and_Common_Problems.

Lekensteyn
источник
В
системном журнале
1
Если в syslog ( grep -i cron /var/log/syslog /var/log/syslog.1) нет записей , начните проверять, запущен ли демон cron: ps uww -C cronдолжен содержать строку с процессом.
Лекенштейн
Извините, что ввел в заблуждение, в системном журнале есть записи для Cron, просто ничего не относящиеся к этой команде ... Я знаю, что некоторые задания запускаются каждый час, я получаю новое почтовое оповещение ... AFAIK, те, которые работают, из crontab в cron.hourly нет ничего, что я пытаюсь заставить работать
до
2

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

#!/bin/bash

У меня также были проблемы в прошлом, с переменными окружения и проблемами PATH. После смены переводчика bashмои проблемы исчезли.

Awi
источник
1

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

Просто отфильтруйте задачи CRON в терминале с помощью мощных egrep и 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 / syslog - распечатай мне Системный журнал
  2. egrep clearme - но выбирайте только те строки, которые содержат текст clearme
  3. awk "{print $ 1}" - выведите мне строку, содержащую текст clearme
  4. > ~ / Desktop / cronlog.txt - вывести результаты в файл cronlog.txt, расположенный в каталоге Desktop .

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

Даниэль Андрей Минкэ
источник