將 upstart 轉換為 systemd - 以 root 身份執行命令,以另一個使用者身份生成命令
我需要幫助將 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 證書和密鑰。