Итак, у меня проблема с запуском процесса 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, а также имя файла цитировать не нужно.