Ubuntu

將 upstart 轉換為 systemd - 以 root 身份執行命令,以另一個使用者身份生成命令

  • December 27, 2018

我需要幫助將 upstart .conf 轉換為 systemd .service。基本上我的 .conf 文件的作用是: exec su -l foo -c 'cd /var/www/path/to/file ; bundle exec puma -C config/puma.rb'

據我所知,我們以 root 身份執行命令,然後使用我們的“使用者”創建登錄 shell:

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 單元開始,並對其進行自定義以添加使用者、工作目錄、puma 路徑以及(如果適用)您的 TLS 證書和密鑰。

引用自:https://serverfault.com/questions/946811