我有下面的 upstart 脚本,如何将其转换为 systemd 服务?
description "x11vnc"
start on runlevel [2345]
stop on runlevel [^2345]
#console log
respawn
respawn limit 20 5
exec /usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /root/.vnc/passwd -rfbport 5900 -shared
答案1
upstart 配置的一些配置选项可以直接转换为 systemd 单元指令。情况就是这样description
(变成Description=
)和exec
(变成ExecStart=
.)
upstart 配置没有expect fork
ordaemon
节(它会翻译成Type=forking
),所以我们应该使用Type=simple
我们的 systemd 单元。
我们来看看剩下的几节:
start on runlevel [2345]
stop on runlevel [^2345]
这本质上只是说该服务应该在机器启动时启动并在机器关闭时停止。在 systemd 中,这是通过安装它并将其链接到multi-user.target
.请参阅[Install]
有关最终单元的部分。
#console log
这已被注释掉......但是您可以使用以下命令从 systemd 单元控制类似的配置StandardOutput=
以及相关选项。
在 upstart 中,console logged
是默认值,它在某种程度上与将输出发送到日志的 systemd 默认值相匹配(因为日志是 systemd 世界中的主要记录器。)
respawn
respawn limit 20 5
所以第一行要求重新启动服务如果意外结束,我相信会翻译成Restart=on-failure
,尽管(总是重新启动)可能更Restart=yes
接近 upstart 在这里所做的事情(我不知道足够多的 upstart 来准确说出它的作用。)
第二行表示限制,5 秒内最多重生 20 次,您可以在 systemd 中配置该限制StartLimitBurst=20
和StartLimitIntervalSec=5
。
最后,将所有内容放在一起,您将在/etc/systemd/system/x11vnc.service
文件中得到以下内容:
[Unit]
Description=x11vnc
StartLimitBurst=20
StartLimitIntervalSec=5
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /root/.vnc/passwd -rfbport 5900 -shared
Restart=on-failure
[Install]
WantedBy=multi-user.target
创建该文件后,执行systemctl daemon-reload
systemd加载单元文件。然后systemctl start x11vnc.service
让它开始运行它并systemctl enable x11vnc.service
在启动时启动它。