Почему скрипт на python3 не пишет данные в файл, когда запущен из crontab?

Вот простейшая запись в файл на python3:

mes = 'hehe\n';
with open('events.log', 'a+') as f:
    f.write(mes)

При запуске с консоли linux работает как положено. Однако, когда я запускаю скрипт при помощи crontab ничего не работает, записи в файле нет вообще. Запуск идет с правами root.

* * * * * /usr/bin/python3.5 /home/username/test.py > /dev/null 2>&1

Если вызывать так, тоже неработает:

* * * * * /usr/bin/python3.5 /home/username/test.py

Выводы stderr ничего не возвращают (/home/username/errors.log пуст)

* * * * * /usr/bin/python3.5 /home/username/test.py > /dev/null 2>> /home/username/errors.log

Как быть, кто знает в чём может быть дело?


Ответы (2 шт):

Автор решения: D. Violet

Пробовали так?

* * * * * myjob.sh >> /var/log/myjob.log 2>&1

что такое 2>&1

События cron:

  • /var/log/cron
  • /var/log/syslog
  • journalctl | grep cron
  • journalctl -u cron
→ Ссылка
Автор решения: Login8

В python3 все пути к файлам необходимо указывать как абсолютные а не как относительные

install_dir = '/usr/local/my_program'
mes = 'hehe\n';
with open(instal_dir+'/events.log', 'a+') as f:
    f.write(mes)

Тогда не важно кто запускает вашу программу, вы с консоли linux или сторонний скрипт например crontab , все будет работать

→ Ссылка