Я знаю, что это очень популярный тип вопроса, поэтому я приношу свои извинения за это, но я действительно застрял, и я прочитал cron wiki и пробовал все эти предложения.
также попробовал все, что этот парень перечисляет в cron wiki , а именно:
добавляет путь bash к crontab, определяя полный путь к процессам внутри сценария bash, префикс скрипта внутри crontab с потоком / bin / bash кровь, так как у меня есть свадьба, чтобы пойти и отчаянно нуждаться в этом проклятом сценарии, чтобы просто работатьЯ могу подтвердить, что скрипт работает при работе с моим терминалом.
Итак, здесь идет ...
Текущий crontab:
# add bash to cronjob path
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# start litecoin daemon on boot
@reboot /opt/litecoin-0.14.2/bin/litecoind
# check every 2 minutes to see if block scrape running and restart it if not
*/2 * * * * /home/grayedfox/github/blockscrape/restartBlockscrape.sh
Сценарий:
#!/bin/bash
NODEPATH=$(which node)
PROCESS="$NODEPATH /home/grayedfox/github/blockscrape/main.js"
if pgrep -f "$PROCESS" > /dev/null; then
echo "Blockscrape is doing it's thing - moving on..."
else
echo "Blockscrape not running! Starting again..."
$PROCESS
fi
Я ожидал бы, даже если работа завершится неудачей, где-то увидеть какую-то ошибку
Обновление: я действительно вижу, что задание cron запускается путем проверки вывода / var / log / syslog.
Выход:
CRON[15038]: (grayedfox) CMD (/home/grayedfox/github/blockscrape/restartBlockscrape.sh)
CRON[15037]: (CRON) info (No MTA installed, discarding output)
Скрипт также находится внутри каталога сценария узла, который он вызывает (хотя я указываю полный путь, как я понимаю, скрипт, когда работает cron, имеет pwd как $ HOME).
Хотя все комментарии были полезны, было предложено @ muru, чтобы записать результат скрипта, который помог мне больше всего - так что не забудьте дать это upvote!
Я закончил запись результатов каждой операции внутри скрипта, которая сразу же поняла, что проблема связана не с запуском работы cron, а с тем, что узел не доступен для среды cron. Я также обновил свой crontab, чтобы сделать оболочку по умолчанию для bash, но это не было необходимо для выполнения задания.
Этот окончательный скрипт работает, но мне все еще не ясно, почему строка 3 не работает для cron, но преуспевает в Баш-терминал, я задам новый вопрос для этой конкретной проблемы.
Crontab:
# make default shell BASH
SHELL=/bin/bash
# start litecoin daemon on boot
@reboot /opt/litecoin-0.14.2/bin/litecoind
# check every minute to see if block scrape running and restart it if not
* * * * * /home/grayedfox/github/blockscrape/restartBlockscrape.sh
Сценарий Bash:
#!/bin/bash
NODE="$(which node)" # <-- output in terminal is as expected (gets node version in use) but is blank in cron job
PROCESS="/home/grayedfox/.nvm/versions/node/v8.9.4/bin/node /home/grayedfox/github/blockscrape/main.js"
LOGFILE="/tmp/log.out"
export BLOCKSCRAPECLI="/opt/litecoin-0.14.2/bin/litecoin-cli"
# source $HOME/.bashrc # <-- even after sourcing .bashrc, line 3 returns nothing
if pgrep -f "$PROCESS" > /dev/null; then
echo "Blockscrape is doing it's thing - moving on..." >> $LOGFILE
else
echo "Blockscrape not running! Starting again..." >> $LOGFILE
echo "Nodepath: $NODE" >> $LOGFILE
echo "Process: $PROCESS" >> $LOGFILE
$PROCESS >> $LOGFILE
fi
Хотя все комментарии были полезны, было предложено @ muru, чтобы записать результат скрипта, который помог мне больше всего - так что не забудьте дать это upvote!
Я закончил запись результатов каждой операции внутри скрипта, которая сразу же поняла, что проблема связана не с запуском работы cron, а с тем, что узел не доступен для среды cron. Я также обновил свой crontab, чтобы сделать оболочку по умолчанию для bash, но это не было необходимо для выполнения задания.
Этот окончательный скрипт работает, но мне все еще не ясно, почему строка 3 не работает для cron, но преуспевает в Баш-терминал, я задам новый вопрос для этой конкретной проблемы.
Crontab:
# make default shell BASH
SHELL=/bin/bash
# start litecoin daemon on boot
@reboot /opt/litecoin-0.14.2/bin/litecoind
# check every minute to see if block scrape running and restart it if not
* * * * * /home/grayedfox/github/blockscrape/restartBlockscrape.sh
Сценарий Bash:
#!/bin/bash
NODE="$(which node)" # <-- output in terminal is as expected (gets node version in use) but is blank in cron job
PROCESS="/home/grayedfox/.nvm/versions/node/v8.9.4/bin/node /home/grayedfox/github/blockscrape/main.js"
LOGFILE="/tmp/log.out"
export BLOCKSCRAPECLI="/opt/litecoin-0.14.2/bin/litecoin-cli"
# source $HOME/.bashrc # <-- even after sourcing .bashrc, line 3 returns nothing
if pgrep -f "$PROCESS" > /dev/null; then
echo "Blockscrape is doing it's thing - moving on..." >> $LOGFILE
else
echo "Blockscrape not running! Starting again..." >> $LOGFILE
echo "Nodepath: $NODE" >> $LOGFILE
echo "Process: $PROCESS" >> $LOGFILE
$PROCESS >> $LOGFILE
fi