注册Linux系统服务systemctl管理
systemctl和service来管理系统服务,将程序注册为系统服务后,可能通过systemctl和service命令,来启动,关闭,重启,查看状态等管理程序
常用的systemctl的程序管理
命令格式:systemctl 动作 服务名
| 序号 | 命令行 |
|
| 1 | systemctl status xxx | 查看服务状态 |
| 2 | systemctl start xxx | 启动服务 |
| 3 | systemctl stop xxx | 停止服务 |
| 4 | systemctl restart xxx | 重启服务 |
| 5 | systemctl enable xxx | 启用服务开机自启动 |
| 6 | systemctl disable xxx | 禁止服务开机自启动 |
| 7 | systemctl list-units --type=service | 查看所有已启动的服务 |
| 8 | systemctl daemon-reload | 修改xxx.service文件后,需要执行 重新加载文件; |
基本步骤:
1.编写service文件
service 结尾,一般分为3部分:【unit】、【service】、【install】
|
| 主要描述 | 关键字段 |
| unit | 此区块信息用于描述当前服务的简单描述: | Description:服务描述信息; Documentation:文档相关信息; After:定义sshd服务应该在哪些服务之后启动; Before:定义sshd服务应该在哪些服务之前启动; Requires:表示强依赖关系,如果sshd服务启动失败 或异常退出,则Requires配置的服务也必须退出; Wants:表示若依赖关系,如果sshd服务启动失败或 异常退出,不影响Wants配置的服务; |
| service | 此区块定义如何启动当前服务 | type 字段定义启动类型等 simple:默认值,ExecStart字段启动的进程为主进程,如果启动脚本中 以 nohup & 形式启动进程时,此时启动脚本后会自动 kill 当前服务; forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程; 启动,停止,重启命令 EnvironmentFile:环境参数配置文件,文件内部配置参数形式为key=value键值对,可以在service文件中以$key的形式引用配置项; ExecStart:启动服务时执行的命令; ExecReload:重启服务时执行的命令; ExecStop:停止服务时执行的命令; ExecStartPre:启动服务之前执行的命令; ExecStartPost:启动服务之后执行的命令; ExecStopPost:停止服务之后执行的命令; 停止模式 KillMode 表示停止服务时的方式 control-group:默认值,当前控制组里面的所有子进程,都会被杀掉 process:只杀主进程 mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 none:没有进程会被杀掉,只是执行服务的 stop 命令
PrivateTmp 该字段用于设置服务是否使用私有的 tmp目录; |
| Install | 定义如何安装配置文件;
| WantedBy:表示服务所在的服务组; WantedBy=multi-user.target 表示 sshd服务属于 multi-user.target 用户组; multi-user.target 组里的所有服务都将开机启动; |
实战简单编写入门:
[Unit]
Description=lsw come on[Service]
Type=simple
User=root
Group=root
ExecStart=/root/system_demo.sh start
ExecStop=/root/system_demo.sh stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
2.编写程序脚本或文件
system_demo.sh:
#!/bin/bash
# description: service start and stop scripts
source /etc/rc.d/init.d/functionslog_success_msg(){action "SUCCESS! $@" /bin/true
}#失败提示函数
log_failure_msg(){action "ERROR! $@" /bin/false
}case $1 in
start)log_success_msg "runing "/root/lsw/demo;;
esacexit 0
控制文件:
#include
int main()
{ while(1){printf("helloworld");sleep(10);}return 0;
}
3.系统服务注册
将文件复制到/usr/lib/systemd/system/目录下,然后将可执行文件放于 /root/lsw/demo
cp system_demo.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start system_demo
systemctl status system_demo
效果如下:

参考:
https://www.cnblogs.com/fusheng11711/p/12893296.html
https://zhuanlan.zhihu.com/p/345709228
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
