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

#!/bin/bash
PATH=/usr/local/bin/ices:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ps cax | grep 'ices' > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  /usr/local/bin/ices /etc/ices/playlist.pls
fi

Он проверяет, запущен ли процесс, и если нет, перезагружает его. Он работает как исполняемый файл (права доступа установлены на 755).

Мой crontab выглядит

    # m h  dom mon dow   command
    */1   *    *    *    *    /etc/ices/checkIces.sh
    */1   *    *    *    *    env > /tmp/env.output

Во второй строке проверяется, будет ли cron хотя бы выходить из env в папке tmp. Кто-нибудь видит что-то не так с моей текущей реализацией?

1 ответ1

0

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

Сценарий выглядит хорошо, за исключением того, что я бы изменил команду PATH следующим образом, просто из осторожности:

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

Вы должны включить это заявление

  exec >>${0}.out 2>>${0}.out

в ваш маленький скрипт bash. Он перенаправляет все выходные данные, стандартные и ошибочные, в файл с тем же именем, что и сценарий, за которым следует .out. Итак, если ваш скрипт называется my_script.sh, вы найдете все выходные данные в my_script.sh.out. Просто убедитесь, что права на запись позволяют создавать и изменять файл. Там вы найдете сообщения об ошибках, которые в противном случае могут потеряться.

В-третьих, попробуйте запустить проблему с командой at, а не cron, на данный момент. Разница заключается в окружающей среде. Если программа работает с at, но не работает с cron, вы будете знать, что вам нужно импортировать некоторые функции вашей среды. Надеюсь, второе предложение даст вам подсказку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .