Мне нужна помощь в преобразовании выскочки .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; связка 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.