Как я заставляю крон запускать мой скрипт удара который ссылочный узел?

Я знаю, что это - чрезвычайно популярный тип вопроса, таким образом, я приношу извинения за это, но я действительно застреваю, и я прочитал крон Wiki и попробовал все те предложения.

Я также попробовал все этот парень списки в его вопросе, а именно:

  • добавление удара соединяет каналом к crontab
  • определение полного пути к процессам в колотит сценарий
  • добавление префикса сценария внутри 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

Я ожидал бы, даже если задание перестало работать, для наблюдения своего рода ошибки где-нибудь, но я ничего не получаю и ничего не вижу!

Обновление: Я могу на самом деле видеть, что задание крона выполняется путем проверки вывода/var/log/syslog.

Вывод:

CRON[15038]: (grayedfox) CMD (/home/grayedfox/github/blockscrape/restartBlockscrape.sh)
CRON[15037]: (CRON) info (No MTA installed, discarding output)

Сценарий также находится в каталоге сценария узла, который он называет (хотя я указываю полный путь, поскольку я понимаю, что сценарий, когда выполнено кроном, имеет, это pwd как $HOME).

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

1 ответ

Хотя все комментарии были полезны для, было предложение @muru для входа результата сценария, который помог мне больше всего - поэтому удостоверьтесь, что дали тому upvote!

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

Этот заключительный сценарий работает однако, все еще неясно мне, почему строка, 3 сбоя для крона, но преуспевают в терминале удара, я задам новый вопрос для того конкретного вопроса.

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
ответ дан 8 December 2019 в 01:56

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

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