Показать статистику
0 голосов
от (4.6тыс. баллов)
У меня через crontab вызываются несколько скриптов. Некоторые из них ничего не оставляют в логах. Возникло подозрение что кронтаб по какой то причине эти скрипты игнорирует. Как можно диагностировать такую проблему? Как вообще понять - отрабатывает cron или нет?
3.5тыс. просмотров 1 ответов

1 Ответ

0 голосов
от (2.4тыс. баллов)

Вариантов может быть несколько. Давайте по порядку разберемся с каждым из них.

Во-первых, cron передает минимальный набор переменных окружения вашим скриптам. Что бы протестировать работает / не работает, можно сделать липовую задачу вроде этой:

* * * * * env > /tmp/env.output

Остается только подождать минуту пока этот файл /tmp/env.output создатся. Как только файл будет создан, уберите эту задачу из крона. И сравните содержимое этого файла с выводом команды env в терминале:

env

Один из типичных "ага, вот оно!" моментов связан с разными значениями переменной окружения PATH. Вполне возможно что ваш скрипт использует какую то команду mycommand, которая вызывается по пути /opt/somepath/bin и которая добавляется к переменной PATH. Поэтому переменная PATH как она задана у вас в шеле может перетираться при вызове скрипта из крона. Что бы избежать такой проблемы, имеет смысл жестко зафиксировать PATH в кроне перед вызовом скрипта:

#!/bin/bash
PATH=/opt/somepath/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# и дальше идет ваш скрипт

Некоторые люди рекомендуют использовать абсолютные пути при вызове команд из crontab, но на мой взгляд это не критично. Главное убедиться что переменная PATH не перезаписывается.

Еще можно убедиться что ваш крон работает. Он должен присутствовать в дереве процессов:

ps -ef | grep cron | grep -v grep

 И вывод должен быть примерно таким:

root    1121   1  0 Sep26 ?    00:00:08 cron

Либо таким:

root    1121   1  0 Sep26 ?    00:00:08 crond

Если ничего нет, то запустите демон:

/sbin/service cron start

Либо

/sbin/service crond start

Еще одним вариантом почему не отрабатывают задания в кронтабе может быть истекший пароль. Убедитесь что в /var/log/messages нет сообщений на этот счет

grep -i "auth" /var/log/messages

Если пароль все таки истек, то будет сообщение вроде такого:

(username) FAILED to authorize user with PAM (Authentication token is no longer valid; new one required)

Решение проблемы в этом случае простое - задать новый пароль через passwd.

...