Я установил python3, следуя руководству Digital Ocean, и запускал свои скрипты python только из командной строки, это bash, который я использую, и он работает:
~$ source /home/username/python_projects/project_name/bin/activate
~$ python3 /home/username/python_projects/project_name.py
~$ deactivate
если я помещу эти команды в crontab в том же порядке, ничего не произойдет.
0 7 * * * source /home/username/python_projects/project_name/bin/activate
0 7 * * * python3 /home/username/python_projects/project_name.py
0 7 * * * deactivate
Что я делаю не так?
Cronjob активен и работает.
~$ systemctl status cron
Файл python имеет следующие разрешения:
-rw-rw-r-- 1 user_name user_name 17075 Feb 7 02:30 python_projects/project_name.py
Покажите нам фактический файл crontab, который вы используете.






Есть несколько вещей, которые могут привести к тому, что ваш cronjob не запустится:
Переменные среды: исходная команда в вашем задании cron настраивает виртуальную среду, но эта среда не передается процессу cron. Вы должны указать полный путь к исполняемому файлу Python в вашей виртуальной среде, например. /home/имя_пользователя/python_projects/имя_проекта/bin/python3.
Проблемы с разрешениями: убедитесь, что у пользователя cron есть разрешение на выполнение сценария и доступ к виртуальной среде.
Вывод: по умолчанию cron не отправляет вывод на терминал. Если ваш скрипт производит выходные данные, вы можете перенаправить их в файл для целей отладки. Вы можете сделать это, добавив > /tmp/output.log 2>&1 в конец записи crontab.
Вы можете проверить системные журналы на наличие сообщений об ошибках, связанных с вашим заданием cron. Журналы обычно находятся в /var/log/syslog или /var/log/messages.
Надеюсь, это поможет!
Задание activate запускается, затем завершается, а затем следующее задание cron ничего не знает о том, что оно сделало. Вы хотите запустить их все в одном процессе (хотя запускать deactivate в конце бессмысленно, так как все, что сделал activate, все равно будет стерто, когда задание завершится).
На практике вы можете запустить интерпретатор Python напрямую из виртуальной среды.
Что бы это ни стоило, сообщение об ошибке «MTA не установлено» означает, что вывод из cron был отброшен, потому что система не смогла понять, как отправить его по электронной почте. Вы, вероятно, захотите изменить правило записи вывода в файл.
0 7 * * * cd python_projects && ./project_name/bin/python3 project_name.py >>project_name.log 2>&1
Возможно, обратите внимание, что cron всегда начинается в вашем домашнем каталоге, поэтому вам не нужно указывать /home/username (при условии, конечно, что username — это пользователь, от которого crontab это запускается).
Вы не можете просто поместить команды в crontab вот так. Crontab использует специальный синтаксис, чтобы точно указать, когда запускать команды.