Каков 'рабочий каталог', когда крон выполняет задание?

Я не знаю то, что Вы подразумеваете под "частным" VLAN, но Linux делает VLAN. ip команда от iproute2 может настроить их. У Вас действительно должны быть NIC и драйвер, который поддерживает его, но большинство делает в эти дни.

177
06.10.2016, 23:17
6 ответов

Добавить cd /home/xxxx/Documents/Scripts/ если Вы хотите, чтобы Ваше задание работало в том каталоге. Нет никакой причины, почему крон изменился бы на тот конкретный каталог. Крон выполняет Ваши команды в Вашем корневом каталоге.

Что касается ssmtp, это не могло бы быть в Вашем значении по умолчанию PATH. Путь крона по умолчанию является зависящим от реализации, так проверьте свою страницу справочника, но по всей вероятности ssmtp находится в /usr/sbin который не находится в Вашем значении по умолчанию PATH, только корень.

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
15 7 * * * cd /home/xxxx/Documents/Scripts && ./email_ip_script.sh
170
27.01.2020, 19:27
  • 1
    @Giles - Спасибо, был бы cron имейте свой собственный PATH или я могу проверить своего пользователя PATH? Я настроил ssmtp, чтобы иметь свой собственный user и wheel разрешение думая это позволило бы любому использовать его (включая крон). Если помогает, что я нахожусь на Понятном CENTOS 6.2 –  ProfessionalAmateur 18.05.2012, 18:51
  • 2
    @ProfessionalAmateur, которым Ваша проблема не состоит в том, что Нельзя использовать ssmtp, но что Ваше задание крона не находит исполняемый файл названным ssmtp потому что это не находится в Вашем PATH. Нет такой вещи как “Ваш пользователь PATH”; это - установка для каждого процесса, не установка в расчете на пользователя. Можно установить путь для всех заданий крона путем помещения a PATH=… строка в Вашем crontab. А-ч –  Gilles 'SO- stop being evil' 19.05.2012, 11:45
  • 3
    я должен был добавить MAILTO ='XXXX@gmail.com' также для получения его работающий наряду с Установкой тракта. Wierd, но это работало на меня. страницы –  mac 08.06.2014, 12:56
  • 4
    Эй Kamaraj, я попробовал Ваш сценарий как эта находка. - тип d |, в то время как считанные DirName действительно повторяют "$ {DirName}" | grep "a">/dev/null 2> &1 если ["$?"-ne "0"] затем находят $ {DirName} - тип f | awk-F/'{$NF печати}', fi сделанный я нашел, что файлы перечисляют дважды, сделайте мы должны остановить его где-нибудь для списка файлов только в один раз Для ssmtp, который можно использовать; ´which ssmtp´ ... –  Fredrick Gauss 09.11.2017, 12:40
  • 5
    @FredrickGauss Делает это type ssmtp –  Gilles 'SO- stop being evil' 09.11.2017, 23:54

Отвечать на вопрос 1: если Вы работаете crontab -e как Ваш собственный пользователь задания будут запланированы в crontab того пользователя и будут таким образом работать с полномочиями того пользователя.

Но необходимо полагать, что задания будут работать в неинтерактивной оболочке, означающей, что $PATH мог бы отличаться от того, который Вы имеете при запущении скрипта из командной строки.

Лучше всегда использовать полные пути в сценариях, особенно если Вы планируете запланировать их через в/крон и т.д.

Я также рекомендовал бы использовать полные пути для всех файлов для предотвращения точно проблем, которые Вы видите.

Для предотвращения условий состязания и других проблем безопасности, необходимо также использовать mktemp для проверки файл, который Вы читаете, не изменяется ничем вне Вашего сценария.

Таким образом, я изменил бы сценарий на что-то как:

vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`"
echo "$vIP_ADDR"
mail_msg=`/bin/mktemp`
/bin/sed "s/IPADDR/$vIP_ADDR/g" /home/xxxx/Documents/Scripts/template.txt > $mailmsg
/path/to/ssmtp XXXXX@gmail.com < $mailmsg
/bin/rm $mailmsg
15
27.01.2020, 19:27

cron выполнения запланированные задания каждого пользователя как тот пользователь. Это должно быть достаточно, чтобы мы решили, что это запускает Ваши скрипты относительно Вашего корневого каталога.

При необходимости в нем для выполнения от другого местоположения, просто используйте cd в Вашем сценарии для движения в то местоположение.

ssmtp находится, вероятно, не в cronПУТЬ по умолчанию (это установлено быть очень узким дизайном на большинстве платформ). Можно или указать полный путь к ssmtp в Вашем сценарии, или можно явно установить ПУТЬ в a) Вашем crontab файле, который будет доступен всем Вашим сценариям, или b) в каждом сценарии.

7
27.01.2020, 19:27

Проверьте этот поток, как можно легко узнать среду крона, это намного меньше, чем Вы привыкли к в интерактивной оболочке. Лучше всего должен предположить, что ничто не установило и явно установило его самостоятельно.

3
27.01.2020, 19:27

Если ваше задание cron является сценарием bash, следующее будет компакт-диском с местоположением вашего сценария (при условии, что вы используете абсолютный путь в определении вашего cron) :

cd "$(dirname "$0")";
35
20.08.2021, 13:25

El directorio de trabajo predeterminado para cronal ejecutar el trabajo es el directorio de inicio, normalmente /home/your-user-name.

5
20.08.2021, 13:25

Теги

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