在全新安装 OpenSuse 12.3 时,我想“守护”一个程序。而且,在互联网上找到的所有示例中,我发现我必须首先创建一个/etc/init.d/myscript
基于/etc/init.d/skeleton
......
但我没有/etc/init.d/skeleton
...这个文件还有其他地方吗?或者也许我需要安装一些东西?
系统是最新的,我先检查了一下。
我知道我可以尝试复制另一个现有/etc/init.d
脚本并对其进行修改,或者创建一个新脚本,但我会知道我是否做错了,或者是否有另一种特殊的方法可以在 OpenSuse 上执行此操作。
答案1
我不确定文件在哪里消失,但我希望此更改与/etc/init.d/skeleton
传统的替换有关,因为 OpenSUSE 12.与众所周知的 initscripts 完全兼容,但我更喜欢使用启动服务的模型。SysV init daemon
systemd
systemd
systemd
在我看来,传统的初始化脚本可能很棘手,有时,它们可能需要更深入的 shell 脚本知识。另一方面,systemd
“initscript”或unit
服务的配置文件(man systemd.unit
)更容易维护,因为它具有与.INI
文件类似的简单语法。您可以尝试编写一些单元文件并通过将该文件拖放到/etc/systemd/system
目录中来启用它。该目录的优先级高于默认目录/usr/lib/systemd/system
。守护进程单元的示例sshd
如下:
[Unit]
Description=OpenSSH Daemon
After=syslog.target network.target
[Service]
EnvironmentFile=/etc/sysconfig/ssh
ExecStartPre=/usr/sbin/sshd-gen-keys-start
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
或者您可以坚持使用您所使用的“旧版”启动脚本。但你会失去一些简洁的功能,systemd
例如:
- 更快的启动时间,真正的服务并行启动
- 自动依赖性处理
- 监控服务并自动重启崩溃的服务
- 以及更多
最后,请记住,如果存在sshd.service
与 initscript ( ) 具有相同基本名称的单元 ( /etc/init.d/sshd
),则该 initscript 将被忽略,并且systemd
将优先使用该单元。