У меня есть специальный скрипт, написанный на Ruby, которому нужны привилегии root. Большинству других процессов это не нужно, поэтому их было легко настроить в Monit. Не этот.
Сервер должен слушать на 386, и этот порт доступен только для root. Я не буду вдаваться в детали того, почему, потому что 1) я не из тех, кто на низком уровне, 2) до сих пор он работал нормально при использовании sudo.
Файл конфигурации monit прост и выглядит следующим образом:
set logfile syslog facility LOG_daemon # Default facility is LOG_USER
set mailserver smtp.sendgrid.net
username "blah", password "blah"
with timeout 20 seconds
set alert blah@bleh.com
set logfile /home/deploy/monit.log
check process ldapserver
with pidfile /var/pids/ldap_server.pid
start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
stop program = "/bin/sh"
Примечание: я добавил / bin / sh в программу остановки, потому что для этого процесса нет программы остановки.
Если я поставлю вот так:
start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
Не запускается. Нет подсказок.
start program = "/usr/bin/sudo -u deploy /usr/local/bin/ruby /var/lib/ldap_server.rb
Сбой также. Нет вывода.
start program = "/bin/su deploy -c '/usr/local/bin/ruby /var/lib/ldap_server.rb'
Не запускается.
Я также попытался перенаправить вывод с помощью > ~/out.log 2 > &1
для захвата stderr и stdout, но, похоже, он не работает.
Теперь я запускаю monit под пользователем развертывания, который ограничен. Поэтому мне нужно каким-то образом запустить сервер ldap от имени пользователя root, но оказалось, что это довольно сложно сделать.
Может ли кто-нибудь просветить меня?
Приветствия
M>