Назад | Перейти на главную страницу

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
Что-то мне не хватает?

Сопоставление Monit может быть немного широким - например, если вы сопоставляете "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.

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

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

эрк. Это решает проблему с помощью кувалды.

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

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

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

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