
На моем Debian
сервере я использую crontab
для планирования python
кода. Проблема в следующем: когда я добавляю строку типа этой:
6 9 * * * python /path/to/daily_task.py &> $HOME/out.txt
Неудивительно, что в выводе указано, что python
команда не найдена.
Конечно, я могу просто добавить полный путь к записи crontab, например /opt/python/3.9.2/bin/python
, , но мне эта идея не нравится, потому что она выглядит запутанной, и эта проблема сохраняется, когда мне нужно, например, сделать что-то os.system("python task.py")
вроде daily_task.py
.
Я попробовал добавить такую строку /etc/environment
:
export PATH="$PATH:/opt/python/3.9.2/bin/"
После перезагрузки я действительно смог использовать только python
в окне терминала, но crontab
's $PATH
по-прежнему состоит только из /usr/bin
.
Где мне следует разместить этот код, чтобы изменить $PATH
его везде, включая crontab
(без изменения файла crontab)?
решение1
Если вы посмотрите на содержимое /bin
, вы увидите много символических ссылок, поскольку многие программы не помещаются напрямую в каталоги bin. Вы можете сделать то же самое:
sudo ln -s /opt/python/3.9.2/bin/python /usr/bin
Таким образом, вам не придется изменять свой crontab
.
решение2
Вы можете добавить переменные среды в сам файл crontab следующим образом:
PATH=/usr/bin:/whatever/bin
HOME=/home/myuser
6 9 * * * python /path/to/daily_task.py &> $HOME/out.txt