Почему не работает Crontab в CentOS 7?

Здравствуйте! В CentOS из под root вызываю crontab -e создаю новую задачу. Лог файл показывает что задача была выполнена но по факту скрипт не запустился. Когда же вношу изменения в /etc/crontab и перезапуска сервис service crond restart задание успешно отрабатывает. Что это? Я проклят?
  • Вопрос задан
  • 1645 просмотров
Пригласить эксперта
Ответы на вопрос 6
shambler81
@shambler81 Куратор тега Linux
which python3.6
И вставить получившийся полный путь
КРОН НЕ имеет по умолчанию ПЕРЕМЕННУЮ PATH как следствие он не в состояние сам определить где лежит бинарник
Ответ написан
Лог файл показывает что задача была выполнена но по факту скрипт не запустился


Если в логе указанна что задача запустилась, значит запустился.
Вопрос в другом - как вы определяете, что не запустилось ?:
- процесс может в консоль выдавать ошибку или по таймеру ждать ввода и завершиться.

Для уверенности:
1) В начале скрипта запишите что-то в какой-то файл
2) В конце скрипта в этот же файл запишите что выполнено
3) И не пренебрегайте выводом логов при добалении в крон
/home/admin/Telegram_bot/main.py >> /home/admin/Telegram_bot/main.log 2>&1

И да, у пайтона есть свой шедуллер - python-crontab

Частая проблема - Глобальные переменные залогиненых пользователей и пользователя запускаемого по крону могут отличаться (как их наличие так и параметры) - тут нужно смотреть вашу систему.

Укажите в теме строчку из crontab -e и /etc/crontab - я не могу с этого поста зайти к вам в систему и увдеть, а не опечатались ли вы... По конкретике можно, что-то сказать.
Ответ написан
Комментировать
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
А простите, с чего Вы решили, что crontab -e правит /etc/crontab? Команда сия правит рутовый персональный кронтаб, который лежит где-то в дебрях /var (где, искать ломы, но возможно /var/cron/tabs или что-то около этого)
А раз не запустился, значит с его кронтабом что-то не то.
Я не раз на такое натыкался, поэтому просто забил на crontab -e и просто правлю /etc/crontab при необходимости.
Ответ написан
Angel_D13
@Angel_D13
Вечный студент
Используй systemd. Недавно на Хабре встречал интересную статью - использование таймеров systemd вместо заданий cron
Ответ написан
Комментировать
smorman
@smorman
When In Rome do as The Romans do...
Если в системе есть Пользователь и вы работаете в его среде, то при вводе в Терминал:
crontab -e
задание пишется в файл:
/var/spool/cron/имя_пользователя_в_системе
работать не будет.

Надо:
sudo crontab -e
и тогда уже задание пишется в файл:
/var/spool/cron/root
и так вот будет работать.
И обязательно апосля выполнить:
sudo /etc/init.d/cron restart

Можно в Терминале сразу, без открытия редактора и ручного ввода внести задание двумя способами:
1. Если задание ни разу вообще не добавлялось в системе в crontab, например:
echo -e '0 */8 * * * php /opt/acelist/as.php /opt/lists/as' | sudo crontab -
и в этом случае перезагружать cron не надо.

Но помните!!!
Добавить новое задание к существующему таким способом не получится, т.к. файл просто перезаписывается именно записанным в коде и оно - задание всегда будет единственным.

2. Если задание уже добавлялось в системе в crontab, то добавить новое можно так, например:
sudo sh -c "echo '0 */8 * * * php /opt/acelist/as.php /opt/lists/as' >> /var/spool/cron/crontabs/root"; sudo /etc/init.d/cron restart
в этом случае задание добавляется новой строкой в файл и уже перегрузка cron нужна, что в коде и присутствует.

Этот же, второй способ добавляет новой строкой и новое задание, если применялся Способ №1.
Ответ написан
Комментировать
@Fenrir89
Какая версия ядра?, какая версия selinux?, спрашиваю потому что в нескольких версиях ядер был глюк с блокировкой доступа к crontab из-за selinux причём не только к рутовому но и для других пользователей, попробуй его временно отключить, если поможет подбирай ядро на котором этот глюк исправлен
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы