将 upstart 转换为 systemd - 以 root 身份运行命令,以其他用户身份关闭命令

将 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

答案1

您不应该只是将内容逐字逐句地复制到 中ExecStart=,尤其是那些仅用于设置的内容,例如更改工作目录或用户。它们有不同的指令(您已经使用过!)所以您应该直接启动您的程序。

尤其是对于 Puma 来说,你应该从systemd 单元示例,并对其进行自定义以添加用户、工作目录、puma 路径以及(如果适用)您的 TLS 证书和密钥。

相关内容