Как заставить КРОН звонить в корректные ПУТИ

Я пытаюсь заставить крон звонить в корректные ПУТИ. Когда я запускаю скрипт Python от оболочки, сценарий хорошо работает, поскольку это использует набор ПУТЕЙ в bashrc, но когда я использую крон, все ПУТИ не используются от bashrc. Существует ли файл, к которому я могу ввести ПУТИ для крона как bashrc или способ назвать ПУТИ от bashrc?

Извините я не думаю, что сформулировал это правильно, я могу заставить корректный сценарий работать (значение, что ПУТЬ к сценарию в crontab не является проблемой здесь), это - как раз в то самое время, когда тот сценарий работает, я выполняю сборку, и это использует ПУТИ, начинаются .bashrc. Когда я запускаю скрипт, когда я зарегистрирован, .bashrc ПУТИ втянуты. Так как крон не работает в оболочке на, говорят, что он не сдерживается .bashrc. Существует ли способ втянуть это, не имея необходимость писать обертку сценария удара?

112
задан Chris Martin 22 February 2016 в 22:57
поделиться

3 ответа

Я использовал / etc / crontab . Я использовал vi , ввел в этот файл нужные ПУТЬ и запустил его от имени пользователя root. Обычный crontab перезаписывает заданные вами пути. Хорошее руководство о том, как это сделать .

Общесистемный файл cron выглядит так:

This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user   command
42 6 * * *   root    run-parts --report /etc/cron.daily
47 6 * * 7   root    run-parts --report /etc/cron.weekly
52 6 1 * *   root    run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py
159
ответ дан 24 November 2019 в 02:47
поделиться

Среда по умолчанию для заданий cron очень разреженная и может сильно отличаться от среды, в которой вы разрабатываете сценарии python. Для сценария, который может запускаться в cron, любая среда, от которой вы зависите, должна быть установлена ​​явно. В самом файле cron укажите полные пути к исполняемым файлам python и к вашим сценариям python.

2
ответ дан 24 November 2019 в 02:47
поделиться

Вы должны поместить полные пути в crontab . Это самый безопасный вариант.
Если вы не хотите этого делать, вы можете поместить вокруг своих программ сценарий-оболочку и указать там ПУТЬ.

например.

01 01 * * * command

становится:

01 01 * * * /full/path/to/command

Также все, что вызывается из cron , должно быть очень осторожно с программами, которые оно запускает, и, вероятно, установить свой собственный выбор для переменной PATH .

РЕДАКТИРОВАТЬ:

Если вы не знаете, где находится команда, вы хотите выполнить which из вашей оболочки, и она сообщит вам путь.

РЕДАКТИРОВАТЬ2:

Итак, как только ваша программа будет запущена, первое, что она должна сделать, это установить PATH и любую другую необходимую переменную (например, LD_LIBRARY_PATH ) на значения, которые являются требуется для запуска сценария.
По сути, вместо того, чтобы думать о том, как изменить среду cron, чтобы сделать ее более подходящей для вашей программы / сценария, заставьте ваш сценарий обрабатывать заданную среду, задав соответствующую при запуске.

21
ответ дан 24 November 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: