方式一:使用init.d启动服务脚本
在root用户下执行以下操作
- 进入/etc/init.d/目录
- 新建脚本文件test.sh,并编辑其内容
- 为脚本文件增加执行权限
chmod +x /etc/init.d/test.sh
init.d介绍
/etc/init.d是/etc/rc.d/init.d的软链接,是用来放服务脚本的,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。
而由于Ubuntu系统中没有/etc/rc.d/init.d这个目录(CentOS中有该目录),所以,为了保持同一种服务在CentOS和Ubuntu使用的统一性,将服务脚本都放在/etc/init.d目录下
方式二:制作Linux服务并设置开机自启动
在root用户下执行以下操作
- 进入/etc/systemd/system目录
- 新建service文件test.service,并编辑其内容
- 为service文件增加执行权限
chmod +x /etc/systemd/test.service
- 重新加载配置文件
systemctl daemon-reload
- 启动/停止/重启该服务
systemctl start/stop/restart test.service
- 设置/取消开机自启动
systemctl enable/disable test.service
service文件介绍
在Linux系统中,每个service服务都需要一个对应的service文件
linux下面有两个地方可以放service文件,一个是/lib/systemd/system目录,这个是放系统服务的地方
一般情况下如果是我们自己建立的服务,需要放在/etc/systemd/system文件夹下面,以和系统服务分开
如何编辑service文件内容
以commvault的服务为例
[Unit]
Description=commvault Service
Requisite=cvunlock.service
After=cvunlock.service
[Service]
EnvironmentFile=/opt/commvault/Base/Temp/Galaxy.env
TasksMax=infinity
Type=forking
ExecStart=/opt/commvault/Base/Galaxy start direct -focus Instance001
ExecStop=/opt/commvault/Base/Galaxy stop direct -focus Instance001
RemainAfterExit=yes
KillMode=none
LimitNOFILE=262144
[Install]
WantedBy=multi-user.target
Alias=commvault.service
常用参数说明
[Unit]中
Description表示service的描述
Requisite表示前置条件,即必须满足某个条件或服务启动之后才能运行本服务
After指定service应该在哪些其他服务启动之后才启动,例如network.target
[Service]中
ExecStart表示service的启动命令
ExecStop表示service的关闭命令
User和Group指定服务运行的用户和组
Restart表示服务在故障后是否应该自动重启
[Install]中
WantedBy指定服务应该在哪个target中启动
一般情况下,只需要重点关注ExecStart项,需要修改为对应脚本的路径和名字
enable命令的原理
linux系统自启动目录为/etc/systemd/system/multi-user.target.wants/
当执行一条systemctl enable test.service
命令后,会在/etc/systemd/system/multi-user.target.wants/这个linux系统自启动目录下为/etc/systemd/system/test.service文件新建一个软链接快捷方式,从而让test.service服务可以开机启动
方式三:使用rc.local文件
在root用户下执行以下操作
- 编辑/etc/rc.local文件,在文件最后面添加需要启动的命令
可以直接执行命令,也可以调用其他的脚本文件
例如cd /usr/ && ./test.sh - 增加执行权限
chmod +x /etc/rc.d/rc.local
- 确认程序写在exit 0行的前面
扩展
rc.local是Linux启动程序在login程序前执行的最后一个脚本
/etc/rc.local是/etc/rc.d/rc.local的软链接