基本命令
启动一个服务:systemctl start blog-local.service
关闭一个服务:systemctl stop blog-local.service
重启一个服务:systemctl restart blog-local.service
显示一个服务的状态:systemctl status blog-local.service
在开机时启用一个服务:systemctl enable blog-local.service
在开机时禁用一个服务:systemctl disable blog-local.service
查看服务是否开机启动:systemctl is-enabled blog-local.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed
存放路径
/etc/systemd/system 供系统管理员和用户使用(一般使用此路径)
/usr/lib/systemd/system 供发行版打包者使用
定义控制单元 [Unit]
指令 |
说明 |
Description |
服务的简单描述,可根据需求任意填写 |
Documentation |
服务的文档路径 |
Requires |
这个服务启动了,它需要的服务也会被启动;它需要的服务被停止了,这个服务也停止了 |
Wants |
这个服务启动了,它需要的服务也会被启动;它需要的服务被停止了,对本服务没有影响 |
Requisite |
这个服务启动了,它需要的服务也会被启动;需要的服务启动不成功,那本服务文件不管能不能检测等不能等待都立刻就会失败 |
Before/After |
定义启动顺序;在xxx.service启动之前或之后启动 |
OnFailure |
如果本服务启动失败了,那么需要启动什么服务 |
BindsTo |
绑定两个服务,两服务的状态保证一致。如服务1为active,则本服务也一定为active |
PartOf |
定义了单向的依赖关系,且只对stop和restart操作有效。当被依赖服务执行stop或restart操作时,本服务也会执行操作,但本服务执行这些操作,不会影响被依赖服务 |
Conflicts |
定义冲突的服务,本服务和被冲突服务的状态必须相反。当本服务要启动时,将会停止目标服务,当启动目标服务时,将会停止本服务 |
安装服务 [install]
指令 |
说明 |
Also |
指出和服务一起安装或者被协助的服务 |
Alias |
指定创建软链接时链接至本服务配置文件的别名文件 |
WantedBy |
服务被允许运行需要的弱依赖性服务,在被依赖目标的.wants目录下创建本服务的软链接 |
RequiredBy |
服务被允许运行需要的弱依赖性服务,在被依赖目标的.requires目录下创建本服务的软链接 |
定义服务本体 [service]
指令 |
说明 |
Type=simple |
(默认值)只适合在shell下运行的前台命令,否则systemd默认会立刻杀掉所有属于服务的进程 |
Type=forking |
要求服务是以daemon模式运行的,需要指定PIDFile文件路径,否则会查找本服务的leader进程PID但是不靠谱(建议指定PIDFile) |
Type=oneshot |
适用于只执行一项任务、随后立即退出的服务;结合RemainAfterExit=yes指令,用户可以通过服务状态判断服务是否运行成功 |
ExecStart |
指定启动服务的命令或者脚本 |
ExecStartPre/ExecStartPost |
指定在ExecStart之前或者之后用户自定义执行的脚本 |
ExecReload |
指定服务重启时执行的命令或者脚本 |
ExecStop |
指定服务停止时执行的命令或者脚本 |
PrivateTmp |
是否给服务分配独立的临时空间 |
PIDFile |
指定PID文件路径;PIDFile只适合在Type=forking模式下使用,其它时候没必要使用;PIDFile指令的值要和服务程序的PID文件路径保持一致 |
创建service文件
vim /etc/systemd/system/blog-local.service
service文件示例
[Unit]
Description=web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/openresty/nginx/logs/nginx.pid
ExecStartPre=nginx -t
ExecStart=nginx -p /home/ubuntu/code/www/blog_server
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
设置开机自启
#会在/etc/systemd/system/multi-user.target.wants/目录下创建service文件软连接
systemctl enable blog-local.service