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

Здравствуйте! В CentOS из под root вызываю crontab -e создаю новую задачу. Лог файл показывает что задача была выполнена но по факту скрипт не запустился. Когда же вношу изменения в /etc/crontab и перезапуска сервис service crond restart задание успешно отрабатывает. Что это? Я проклят?
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 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
Если я чешу в затылке - не беда!
А простите, с чего Вы решили, что crontab -e правит /etc/crontab? Команда сия правит рутовый персональный кронтаб, который лежит где-то в дебрях /var (где, искать ломы, но возможно /var/cron/tabs или что-то около этого)
А раз не запустился, значит с его кронтабом что-то не то.
Я не раз на такое натыкался, поэтому просто забил на crontab -e и просто правлю /etc/crontab при необходимости.
Ответ написан
Angel_D13
@Angel_D13
Вечный студент
Используй systemd. Недавно на Хабре встречал интересную статью - использование таймеров systemd вместо заданий cron
Ответ написан
Если в системе есть Пользователь и вы работаете в его среде, то при вводе в Терминал:
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 причём не только к рутовому но и для других пользователей, попробуй его временно отключить, если поможет подбирай ядро на котором этот глюк исправлен
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы