一. 添加开机启动服务
-
创建后缀名为
service
的配置文件,比如创建文件test.service
,文件内容如下:[Unit] Description=Test After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s TimeoutStartSec=0 ExecStart=/usr/local/test [Install] WantedBy=multi-user.target
常用参数释义:
- After-依赖关系,表示在网络启动后启动本服务
如何处理依赖关系:
使用 systemd 时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,单元 A 要求单元 B 在 A 启动之前运行。在此情况下,向单元 A 配置文件中的[Unit]
段添加Requires=B
和After=B
即可。若此依赖关系是可选的,可添加Wants=B
和After=B
。请注意Wants=
和Requires=
并不意味着After=
,即如果After=
选项没有制定,这两个单元将被并行启动。
依赖关系通常被用在服务(service)而不是目标(target)上。例如, network.target 一般会被某个配置网络接口的服务引入,所以,将自定义的单元排在该服务之后即可,因为 network.target 已经启动。 - Type-类型
Type=simple
:(默认值)
systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型。
Type=forking
:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。
Type=oneshot
:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify
:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus
:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
Type=idle
:systemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。 - ExecStart-启动服务的命令行,包括执行文件路径和程序参数等。
- WantedBy-给哪个用户组安装此服务
multi-user.target 终端用户
graphical.target 桌面用户
default.target 默认用户
- After-依赖关系,表示在网络启动后启动本服务
-
将刚才创建的配置文件放在
/usr/lib/systemd/system
用户软件包安装目录
或
/etc/systemd/system/
系统管理员安装目录 -
执行如下命令安装服务:
systemctl enable test.service #安装服务 systemctl start test.service #启动服务 systemctl daemon-reload #重新加载
二. 添加开机启动脚本
-
将脚本移动到/etc/rc.d/init.d目录下
mv test.sh /etc/rc.d/init.d
-
增加脚本的可执行权限
chmod +x /etc/rc.d/init.d/test.sh
-
添加脚本到开机自动启动项目中
cd /etc/rc.d/init.d chkconfig --add test.sh chkconfig test.sh
注意:
你直接把你的平时写的加的脚本这样 chkconfig --add
肯定是要报 service test.sh does not support chkconfig
错误的,不过你只需要在 test.sh
脚本开头 #!/bin/bash
下面加上如下内容就行。
#chkconfig: 345 88 14 #345 代表权限
三.添加开机启动脚本(二)
上面的方法在很多情况下都可能会出现与预期不一致的行为问题,所以小C还是建议以Centos官方建议的方式来实现开机启动脚本:
- 新建your_startup.service文件
# touch /usr/lib/systemd/system/your_startup.service
- 编辑your_startup.service文件
# vim /usr/lib/systemd/system/your_startup.service
- 增加如下内容,保存并退出
[Unit] Description=start your_startup service Requires=graphical.target After=graphical.target [Service] Type=forking User=root Group=root Restart=always TimeoutSec=5 IgnoreSIGPIPE=no KillMode=process GuessMainPID=no RemainAfterExit=no ExecStart=/etc/rc.d/init.d/your_startup.sh [Install] WantedBy=graphical.target
- your_startup.sh启动脚本增加执行权限
# chmod 755 /etc/rc.d/init.d/your_startup.sh
- 配置开机启动
# systemctl enable /usr/lib/systemd/system/your_startup.service
- 重启
# reboot
- 查看 your_startup.sh 是否成功启动?