Как мне получить cron для запуска моего скрипта bash, который ссылается на узел?

Я знаю, что это очень популярный тип вопроса, поэтому я приношу свои извинения за это, но я действительно застрял, и я прочитал 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).

1
задан 16 March 2018 в 12:12

2 ответа

Хотя все комментарии были полезны, было предложено @ 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
0
ответ дан 17 July 2018 в 18:44

Хотя все комментарии были полезны, было предложено @ 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
0
ответ дан 23 July 2018 в 19:33

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

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