systemd:如何在服务文件中使用 ExecStopPre

arv*_*ved 7 systemd

在我的守护进程停止之前,我需要调用另一个程序。

我的第一次尝试是使用ExecStopPre类似于ExecStartPre但根据https://bugs.freedesktop.org/show_bug.cgi?id=73177这不受支持,我应该使用“多个 ExecStop”。

有人有这方面的例子吗?我应该如何杀死守护进程ExecStop

小智 11

您将多行与 ExecStop (来自 node.js 服务):例如

[Service]
ExecStartPre=/usr/local/bin/npm run build
ExecStartPre=-/bin/rm local.sock
ExecStart=/usr/local/bin/npm --parseable start 
ExecStop=/usr/local/bin/npm --parseable stop
ExecStop=-/bin/rm local.sock
RestartSec=300
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodejs
User=nobody
Group=nobody
Environment=NODE_ENV=dev
Environment=PORT=3000
WorkingDirectory=/var/www/nodejs/quaff
UMask=007
Run Code Online (Sandbox Code Playgroud)

  • [关于`ExecStart=`的文档](https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=) 说:“如果指定了多个命令,则调用这些命令按照它们在单元文件中出现的顺序顺序排列。如果其中一个命令失败(并且没有以 '-' 为前缀),则不会执行其他行,并且该单元被视为失败。” 我想`ExecStop=`也是如此。 (3认同)
  • 执行顺序总是从上到下吗? (2认同)