Не может смонтировать другой сервер в 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 в 04:16

1 ответ

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

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

  1. всегда используйте полный полный путь для исполняемых программ в сценариях, которые будут выполнены как задания крона; например.

    /usr/sbin/mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}
    

или

  1. добавьте подходящее PATH присвоение наверху таких сценариев, например.

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

Примечание: Задания выполняются от системы /etc/cron.d каталог имеет более обширный набор пути явно в /etc/crontab:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1
ответ дан 3 November 2019 в 04:33

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

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