Когда я запускаю/bin/bash скрипт, он хорошо работает, и он входит в некоторые файлы журнала в сценарии. Но, когда я выполняю его от крона, это не регистрируется в файл! это только регистрируется к/var/mail/root, говоря это
Date: Fri, 12 Aug 2016 08:39:01 +0300 (MSK)
/bin/sh: 1: root: not found
это - сценарий:
#!/bin/bash
LOG_FILE="test-crontab.log"
echo "started testing cron" >> ${LOG_FILE}
pgrep tunnel
if [[ ${?} != 0 ]]; then
echo "Tunnel process is not running..." | tee -a ${LOG_FILE}
echo "initializing tunnel..." | tee -a ${LOG_FILE}
/usr/local/bin/stunnel | tee -a ${LOG_FILE} 2>&1
fi
echo `date` >> ${LOG_FILE}
и это - крон:
45 8 * * * /home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.sh > /dev/null
Для получения файла журнала, где Вы ожидаете, что это будет, замена:
LOG_FILE="test-crontab.log"
С:
LOG_FILE="/home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.log"
Команда [[ ${?} != 0 ]]
только для удара. Из сообщения об ошибке, что Вы заключаете в кавычки, сценарий, кажется, работает под /bin/sh
. Один способ зафиксировать, который должен заменить:
if [[ ${?} != 0 ]]; then
С:
if [ ${?} != 0 ]; then
Другой подход должен работать crontab -e
и добавьте следующую строку к Вашему crontab
файл:
SHELL=/bin/bash
Кроме того, для простоты и стиля, рассмотрите замену:
echo `date` >> ${LOG_FILE}
с:
date >> "${LOG_FILE}"
Это устраняет бесполезное использование эха.
Наконец, рассмотрите двойные кавычки помещения вокруг всех переменных оболочки, особенно $LOG_FILE
. Поскольку текущее значение LOG_FILE
не содержит пробелов или активных против оболочки символов, это не нужно теперь. Но, помещая двойные кавычки вокруг них желание предотвратит неприятные неожиданности в будущем.
Я думаю, что Ваша crontab запись является неправильной.
формат человечности crontab файл "m h dom понедельник dow пользовательская команда", куда первые 5 записей specfy время задание выполняются. 6-я запись является пользователем, который выполняет задание (я думаю, что это отсутствует в Вашей записи), и 7-я запись является командой, которую Вы хотите выполнить.
я думаю, что необходимо исправить crontab строку к
45 8 * * * корень/home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.sh>/dev/null
, предполагающий, что Вы хотите, чтобы команда работала как корень
Рабочий каталог в моем случае был /home/me
, таким образом, относительный путь как test-crontab.log
главным образом будет разрешенным к /home/me/test-crontab.log
, я не люблю идеи изменить пути в файлах и делаю ее менее портативной, вместо этого изменяют каталог на cronjob строке
cd /path/to/directory && ./bin/myapp