Answers:
OnFailure=
在section中有一个指令[Unit]
,记录在systemd.unit(5)中。定义如下:
用空格分隔的一个或多个单元的列表,当该单元进入“失败”状态时将被激活。
(OnFailureJobMode=
同一部分中还有一条指令,该指令允许设置作业模式以激活OnFailure =单位。)
/etc/systemd/system
并将其名称放置在OnFailure=
指令中。
您也可以ExecStopPost
直接运行命令而不是启动单元。
我对OnFailure
设置感到不满意,所以我不断寻找和发现ExecStopPost
。
以下是真实的示例,如果主要任务失败,则systemd将运行git
命令。
[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service
[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter
User=root
# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer
# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .
Restart=always
RestartSec=10
KillSignal=SIGKILL
[Install]
WantedBy=multi-user.target
https://www.freedesktop.org/software/systemd/man/systemd.service.html
ExecStopPost =服务停止后执行的其他命令。这包括使用了ExecStop =中配置的命令,服务未定义任何ExecStop =或服务意外退出的情况。该参数采用多个命令行,遵循与ExecStart =描述的相同方案。这些设置的使用是可选的。支持说明符和环境变量替换。请注意,与ExecStop =不同的是,当服务无法正确启动并再次关闭时,将调用使用此设置指定的命令。
建议使用此设置进行清理操作,即使服务无法正确启动,清理操作也应执行。即使该服务在中途启动失败并且遗留了不完全初始化的数据,使用此设置配置的命令也必须能够运行。由于执行此设置指定的命令时服务的进程已经终止,因此不应尝试与它们进行通信。
请注意,使用此设置配置的所有命令都将与服务的结果代码以及在$ SERVICE_RESULT,$ EXIT_CODE和$ EXIT_STATUS环境变量中设置的主进程的退出代码和状态一起调用,请参见systemd.exec。 (5)详细。