迁移到 systemd 的第一条规则

迁移到 systemd 的第一条规则

我刚刚将服务器从 Ubuntu 14.10 升级到 15.04,我通过自定义 upstart 脚本启动的几个服务不再运行。

我的理解是我需要将它们重写为systemd服务,但是一夜之间学习整个系统的想法systemd有点令人生畏。

upstart 脚本只是autossh在启动时启动,我还有几个其他类似的脚本可以启动长时间运行的进程。

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

我怎样才能将其重写为一项systemd服务?

答案1

迁移到 systemd 的第一条规则

截至目前,也就是 2015 年,很可能已经有人这样做了。

systemd 已经存在好几年了。而且已经有一大批人编写单元文件并发布它们。GitHub 似乎特别吸引了服务单元集合的存储库。

事实上,简单地在 WWW 上搜索autossh.service(作为短语)就会得到以下结果:

模板单元

话虽如此,正如我在 StackExchange 上的几个地方指出的那样,这种迁移不是一个机械的过程,有时只是机械地将已有的内容转换为单元文件是错误的,或者至少是错误的。在这种情况下,autossh肯定需要用模板单元,它被实例化为实际的服务单元,由目标名称参数化。因此,有:/etc/systemd/system/[email protected]

[单元]
描述=来自 %i 的反向隧道的 AutoSSH 服务
之后=网络.目标

[服务]
用户=autossh
环境文件=/etc/%p/%i.conf
ExecStart=/usr/bin/autossh -M 0 -q -N $SSH_USER@%i $SSH_OPTIONS

[安装]
WantedBy=多用户.目标

创建一个名为的文件/etc/autossh/other_server.example.conf,至少命名为:

SSH_USER=joe

然后应用所有常见的控制措施:

  • systemctl enable autossh@other_server.example— 允许实例在引导时自动启动。
  • systemctl start autossh@other_server.example— 立即手动启动该实例。
  • systemctl status autossh@other_server.example— 查看其状态。

是的,第一条规则也适用于此。搜索后,可以发现 OpenSUSE 的 Greg Freemyer 比我早了不到两周就做到了这一点。

相关内容