Не удается установить другой сервер в crontab с 16.04

У меня есть два сервера в моей сети, и я переношу некоторые данные с одного сервера на другой. Я написал сценарий, чтобы выполнить это, и он отлично работает, когда я запускаю его вручную. Однако, когда я включаю его в crontab для автоматизации процесса, он не будет монтировать внешний сервер, даже если скрипт работает. Я отправляю как можно больше информации в журнал, но, не сообщается об ошибках монтирования, только тот факт, что он не подключался.

Это сценарий:

#!/bin/bash LOGFILE="/var/log/SRV1.log" echo $(date +%Y-%m-%d_%H:%M:%S)" --- Begins Now" | tee -a ${LOGFILE} StartTime="$(date +%s)" echo "Connecting to SRV1" | tee -a ${LOGFILE} mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}

файл принадлежит root: root с 755 правами доступа. (Я знаю, что смогу затянуть это, но я все еще просто экспериментирую).

0
задан 20 November 2017 в 15:16

2 ответа

Программа cron работает в очень ограниченной среде - вы можете увидеть это, например, если вы создаете crontab, содержащий

* * * * * /usr/bin/printenv > /tmp/cronenv

, а затем посмотрите на полученный файл:

$ cat /tmp/cronenv LANGUAGE=en_CA:en HOME=/home/steeldriver LOGNAME=steeldriver PATH=/usr/bin:/bin LANG=en_CA.UTF-8 SHELL=/bin/sh PWD=/home/steeldriver

То же самое относится к root crontabs (т.е. задания, представленные с использованием sudo crontab -e):

LANGUAGE=en_CA:en HOME=/root LOGNAME=root PATH=/usr/bin:/bin LANG=en_CA.UTF-8 SHELL=/bin/sh PWD=/root

В частности, по умолчанию PATH содержит только /bin и /usr/bin ; это было бы прекрасно для mount:

$ which mount /bin/mount

, однако это не будет работать для mount.cifs, например, поскольку оно находится в /usr/sbin:

$ which mount.cifs /sbin/mount.cifs

Решение также:

всегда использует полный абсолютный путь для исполняемых программ в сценариях, которые будут выполняться как задания cron; например /usr/sbin/mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}

или

всегда используют полный абсолютный путь для исполняемых программ в сценариях, которые будут выполняться как задания cron; например /usr/sbin/mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}

ПРИМЕЧАНИЕ. Задания, запущенные из каталога /etc/cron.d системы, имеют более обширный путь, заданный явно в /etc/crontab:

SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0
ответ дан 18 July 2018 в 12:38

Программа cron работает в очень ограниченной среде - вы можете увидеть это, например, если вы создаете crontab, содержащий

* * * * * /usr/bin/printenv > /tmp/cronenv

, а затем посмотрите на полученный файл:

$ cat /tmp/cronenv LANGUAGE=en_CA:en HOME=/home/steeldriver LOGNAME=steeldriver PATH=/usr/bin:/bin LANG=en_CA.UTF-8 SHELL=/bin/sh PWD=/home/steeldriver

То же самое относится к root crontabs (т.е. задания, представленные с использованием sudo crontab -e):

LANGUAGE=en_CA:en HOME=/root LOGNAME=root PATH=/usr/bin:/bin LANG=en_CA.UTF-8 SHELL=/bin/sh PWD=/root

В частности, по умолчанию PATH содержит только /bin и /usr/bin ; это было бы прекрасно для mount:

$ which mount /bin/mount

, однако это не будет работать для mount.cifs, например, поскольку оно находится в /usr/sbin:

$ which mount.cifs /sbin/mount.cifs

Решение также:

всегда использует полный абсолютный путь для исполняемых программ в сценариях, которые будут выполняться как задания cron; например /usr/sbin/mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}

или

всегда используют полный абсолютный путь для исполняемых программ в сценариях, которые будут выполняться как задания cron; например /usr/sbin/mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}

ПРИМЕЧАНИЕ. Задания, запущенные из каталога /etc/cron.d системы, имеют более обширный путь, заданный явно в /etc/crontab:

SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0
ответ дан 24 July 2018 в 20:00

Другие вопросы по тегам:

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