我需要帮助将 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 证书和密钥。