Мне нужна помощь в преобразовании выскочки .conf в .service systemd. По сути, мой файл .conf делает следующее: exec su -l foo -c 'cd /var/www/path/to/file ; bundle exec puma -C config/puma.rb'
Насколько я могу судить, мы запускаем команду от имени пользователя root, а затем создаем оболочку входа в систему, используя нашего «пользователя»:
root 1 0.0 0.0 5 7 ? Ss Date 0:00 su -l foo -c cd /var/www/path/to/file ; bundle exec puma -C config/puma.rb
foo 2 0.0 0.0 6 8 ? Ss Date 0:00 -su -c cd /var/www/path/to/file ; bundle exec puma -C config/puma.rb
Вот что у меня есть с моим файлом systemd .service:
[Unit]
Description=simple boot on start
After=network.target
[Service]
Type=simple
User=foo
WorkingDirectory=/var/www/path/to/file
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec puma -C /var/www/path/to/file/config/puma.rb'
Restart=always
[Install]
WantedBy=multi-user.target
Я знаю, что это неправильно, но работает ... вроде как. В том смысле, что я запускаю процесс, но как root. Не запускать команду от имени root для запуска процесса от имени «пользователя»:
root 3 0.0 0.0 4 5 ? Ss Date 0:00 /usr/bin/sudo /bin/bash -lc bundle exec puma -C /var/www/path/to/file/config/puma.rb
Это довольно ново для меня на новой работе, поэтому я пытаюсь найти что-то новое в этой системе. Любая помощь приветствуется.
Спасибо! D
Вы не должны просто копировать вещи буквально в ExecStart=
, особенно те, которые предназначены только для настройки, например, для изменения рабочего каталога или пользователя. У них разные директивы (которые вы уже использовали!), Поэтому вам просто нужно запустить свою программу.
В частности, для Puma вам следует начать с образец systemd unitи настройте его, чтобы добавить пользователя, рабочий каталог, путь к puma и (если применимо) ваш сертификат и ключ TLS.