Linux Centos 7 将upstart脚本转换为systemd服务

Linux Centos 7 将upstart脚本转换为systemd服务

我有下面的 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 forkordaemon节(它会翻译成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=20StartLimitIntervalSec=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-reloadsystemd加载单元文件。然后systemctl start x11vnc.service让它开始运行它并systemctl enable x11vnc.service在启动时启动它。

相关内容