Monit не удалось запустить сценарий оболочки

Так что у меня проблема с monit, запускающим процесс, это мой код:

check process program_1
matching "program_1"
start program = "/home/user1/files/start.sh"
stop program = "/home/user1/files/stop.sh"

Monit работает как root, в любом случае, когда я завершу работу, процесс monit заметит это и попытается запустить его снова. Однако это не удается сделать. не удалось запустить: /home/user1/files/start.sh Я также попытался это:

check process program_1
matching "program_1"
start program = "/bin/bash -c '/home/user1/files/start.sh'"
stop program = "/bin/bash -c '/home/user1/files/stop.sh'"

Это тоже не работает. Теперь он говорит: не удалось запустить: /bin/bash
Есть что-то, что я пропускаю?

4 ответа

Мониторинг соответствия может быть немного широким - например, если вы используете "sh", он всегда будет думать, что ваша программа запущена.
Попробуйте запустить следующее, пока ваша программа_1 не запущена:

ps aux | grep program_1 | grep -v grep

Если вы видите какой-либо вывод, значит, ваше соответствие неверно, попробуйте сузить шаблон поиска.

В качестве лучшей практики я бы посоветовал вам либо заставить program_1 написать файл pid и прочитать его с помощью monit pidfile:

check process program_1 with pidfile /run/program_1.pid

Или, если это невозможно, напишите короткий скрипт, который фактически проверяет, работает ли ваша программа, и возвращает 1 для неработающего и 0 для запуска.
Затем передайте свой сценарий Monit следующим образом:

check program program_1 with path /etc/periodic/program_1_test.sh
if status != 0 then restart
start program = "/home/user1/files/start.sh"
stop program = "/home/user1/files/stop.sh"

Кроме того, никогда не выполняйте chmod 777 для скрипта, который запускается от имени пользователя root.

Сработало, когда я изменил интерпретатор оболочки на #!/bin/sh вместо #!/bin/bash, что позволило захватить переменную среды monit. Кроме того, я пытаюсь выполнить сценарий оболочки с расширением ".sh" #!/bin/sh #echo $1 > /temp/file2 { echo «MONIT_SERVICE — это $MONIT_SERVICE» echo «MONIT_EVENT — это $MONIT_EVENT» echo «MONIT_DESCRIPTION — это $MONIT_DESCRIPTION» } >> /temp/file2

Я думаю, возможно, что файл не имеет прав на запуск без bash (должен быть в состоянии исправить, выполнив "chmod +x", и ваша вторая команда не должна включать ключ "-c" для bash и имя файла также не нужно цитировать

(должен быть комментарий, но это немного долго)

Я запускал chmod 777 на start.sh

простофиля. Это нападает на проблему с кувалдой.

Вы не сказали, на чем все это работает. Я предлагаю проверить

1) если он работает в среде chroot (если он работает от имени пользователя root, это будет разумным предупреждением для упаковщика)

2) если у вас SELinux (или другая система обязательного контроля доступа, такая как Smack или AppArmor). Вы должны увидеть некоторую активность журнала, относящуюся к сценарию, который вы пытаетесь запустить.

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