Centos7 如何设置.service 在最后退出
时间: 2024-04-28 18:23:04 浏览: 89
你可以在.service文件中添加一个ExecStopPost选项,来在服务停止时执行一些命令。具体操作步骤如下:
1. 打开你的.service文件,一般位于 /usr/lib/systemd/system 目录下。
2. 在 [Service] 部分中添加下面这行代码:
ExecStopPost=/usr/bin/sleep 5
这样,服务停止后会延迟5秒执行 /usr/bin/sleep 命令。
3. 在 /usr/bin/sleep 命令后面添加你需要执行的命令即可。
例如,如果你需要在服务停止后执行一个脚本 /usr/local/scripts/cleanup.sh,那么可以这样写:
ExecStopPost=/usr/bin/sleep 5 ; /bin/bash /usr/local/scripts/cleanup.sh
4. 保存文件并退出。
5. 重新加载systemd配置并启动你的服务:
systemctl daemon-reload
systemctl start your-service-name
这样,当你停止服务时,它将等待5秒执行你指定的命令,然后才退出。
相关问题
Centos7 如何设置.service 在所有服务退出后再执行
你可以使用systemd的shutdown.target来实现在所有服务退出后再执行某个命令或服务。具体操作步骤如下:
1. 创建一个新的服务文件,例如 /etc/systemd/system/my-shutdown.service ,并在其中添加以下内容:
```
[Unit]
Description=My Shutdown Service
DefaultDependencies=no
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/usr/bin/sleep 5 ; /bin/bash /usr/local/scripts/cleanup.sh
[Install]
WantedBy=multi-user.target
```
2. 在上面的代码中,我们使用了sleep命令来延迟5秒执行 /usr/local/scripts/cleanup.sh 脚本,你可以根据需要进行修改。
3. 保存并退出文件。
4. 启用新的服务文件并重新加载systemd配置:
```
systemctl enable my-shutdown.service
systemctl daemon-reload
```
5. 现在,当你执行shutdown命令时,systemd将会启动my-shutdown.service服务,并且在所有其他服务停止后,等待5秒后执行 /usr/local/scripts/cleanup.sh 脚本。
需要注意的是,如果你使用了一些特殊的服务(例如网络服务),它们可能会在shutdown.target之前退出。在这种情况下,你需要将my-shutdown.service的Before选项更改为对应服务的名称,以确保my-shutdown.service在该服务退出之前执行。
Centos7 .service 如何使服务最后一个退出
在CentOS 7中,可以通过在Systemd服务的unit配置文件中设置`ExecStopPost`指令来实现在服务最后一个退出时执行指定的命令。
`ExecStopPost`指令可以在服务停止之后立即执行指定的命令,而不管服务是正常停止还是非正常停止。通过在`ExecStopPost`指令中执行一些清理或者其他操作,可以确保服务在退出时完成所有必要的操作。
以下是一个示例systemd服务unit文件的片段,其中包含`ExecStopPost`指令:
```
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/my-service
ExecStop=/usr/bin/killall my-service
ExecStopPost=/usr/bin/my-cleanup-script
[Install]
WantedBy=multi-user.target
```
在上面的示例中,`ExecStopPost`指令指定了`/usr/bin/my-cleanup-script`脚本,在服务最后一个退出时执行。请注意,`ExecStop`指令与`ExecStopPost`指令的区别在于,`ExecStop`指令只在服务正常停止时执行,而`ExecStopPost`指令则总是执行。
需要注意的是,如果服务是由于系统关机或重启而停止的,`ExecStopPost`指令可能不会执行。因此,如果需要在服务被强制停止时执行一些操作,可以使用`KillMode`指令来配置服务的行为。例如,可以使用`KillMode=process`来配置服务在被强制停止时仅杀死服务进程,并保留`ExecStopPost`指令的执行。
阅读全文