systemd的相关命令
systemctl list-unit-filesq #查看linux的开机自动开启的所有服务
systemd-analyze # 查看启动耗时
systemd-analyze blame # 查看每个服务的启动耗时
systemd-analyze critical-chain # 显示瀑布状的启动过程流
systemd-analyze critical-chain atd.service # 显示指定服务的启动流
disable enable的原理
enable 就是创建了一个软链接
disable 就是删除了一个软链接
systemd文件格式说明
systemd unit 文件通常是由三部分组成的
[Unit] 定义的通用选项,比如描述信息,依赖关系等
[Service] 定义服务的类型,具体的启动关闭重启选项都在此部分配置
[Install] 定义由开机自启和不开机自启命令时实现的选项
unit 模块常用说明
service 模块常用说明
对于常见服务推荐使用forking 模式即可。
oneshot 适用于一次的服务
install 模块常用说明
WantedBY #哪些服务需要被依赖
type=simple和type=forking的区别
使用Type=forking时,要求ExecStart启动的命令自身就是以daemon模式运行的。
Type=simple是一种最常见的通过systemd服务系统运行用户自定义命令的类型,也是省略Type指令时的默认类型。
Type=simple类型的服务只适合那些在shell下运行在前台的命令。也就是说,当一个命令本身会以daemon模式运行时,将不能使用simple,而应该使用Type=forking。比如ls命令、sleep命令、非daemon模式运行的nginx进程以及那些以前台调试模式运行的进程,在理论上都可以定义为simple类型的服务。
案例
自定义一个nginx脚本
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/application/nginx-1.20.1/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /application/nginx-1.20.1/logs/nginx.pid
ExecStartPre=/application/nginx-1.20.1/sbin/nginx -t
ExecStart=/application/nginx-1.20.1/sbin/nginx
ExecReload=/application/nginx-1.20.1/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
java程序
[Unit]
Description=eladmin
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Environment=JAVA_HOME=/usr/local/jdk
ExecStart=/usr/local/jdk/bin/java -jar /opt/eladmin/package/eladmin-system-2.7.jar
[Install]
WantedBy=multi-user.target