Хочу запустить ежечасное задание cron как определенный пользователь (xfeautomation) и виртуальную среду python. Запуская как определенный пользователь, мне придется добавить расположение скрипта в PATH? Мое текущее задание cron выглядит так:
0 * * * * xfeautomation /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Это правильный или оптимальный путь? TIA
решение1
переключиться на этого пользователя.
sudo su - xfeautomation
Бегать
crontab -e
Появится редактор файлов с пустым файлом. Добавьте туда свою работу без имени пользователя и сохраните ее.
0 * * * * /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Проверка:
sudo su - xfeautomation
crontab -l
ИЛИ
sudo crontab -u xfeautomation
решение2
При запуске от имени определенного пользователя мне придется добавлять местоположение скрипта в PATH?
Обычно вам не нужно изменять переменную среды PATH, когда вы используете абсолютные пути, как вы делаете сейчас с помощью/opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Как системный администратор вы можете создавать запланированные пакетные задания, которые будут запускаться под другим идентификатором пользователя:
Как объяснено вэтот ответ:настроить персональный crontab для этого пользователя. Задания в личном crontab всегда будут выполняться под идентификатором пользователя их владельца.
Обратите внимание, что когда вы как администратор настраиваете личный crontab для другого пользователя, этот пользователь сможет изменять и удалять эту спецификацию задания cron, отменяя вашу работу.В качестве альтернативы вы можетезапланировать системное задание из системного crontab. Системный crontab (обычно
/etc/crontab
и/или файлы drop-in в/etc/cron.d/
) принадлежит пользователю root и не может быть изменен непривилегированными пользователями. Спецификация задания в системном crontab поддерживает дополнительное поле, отсутствующее в файлах personal crontab: в поле № 6 необходимо имя пользователя, напримерxfeautomation
идентификатор пользователя, который будет использоваться для выполнения задания.
Синтаксис, который вы разместили, верен для записи в/etc/crontab
или файла drop-in, например/etc/cron.d/wf_api_linux
0 * * * * xfeautomation /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Так как вы регистрируете все выходные данные и ошибки, это не проблема, но обычно cron отправляет стандартный вывод и ошибки пользователю root при настройке системного crontab и напрямую пользователю при использовании персонального crontab.
Насколько мне известно, по сути оба метода приводят к одинаковым условиям работы, и, за исключением вопросов, связанных с правом собственности на спецификацию работы и электронные письма, они эквивалентны.