应用程序 systemctl 未执行文件 httpd.service 中的整行 ExecStart

应用程序 systemctl 未执行文件 httpd.service 中的整行 ExecStart

确切的文件位置是:

/etc/systemd/system/multi-user.target.wants/httpd.service

我修改了 ExecStart 行以反映以下内容: ExecStart=echo START && echo test > /root/out.txt && echo $OPTIONS > /root/out.txt && echo END && /usr/sbin/httpd $OPTIONS -DFOREGROUND

正如您所看到的,我使用 && 来分隔命令。我正在尝试找到帮助调试服务输出的方法。

进行此更改后,当我执行“ ”命令时系统仍在启动 apache systemctl start httpd.service。然而,它给出了一个错误,指出启动文件已被修改(这很好),但看起来它从另一个未知位置拉出了实际的启动行,因为文件 /root/out.txt 从未创建过。如果有人能给我更多关于为什么会发生这种行为的信息,我将非常感激。

过去在新的 systemd/systemctl 出现之前,我会使用以下命令来观察启动脚本在类似情况下所做的事情:

bash -X /etc/init.d/httpd start

正如您在 systemctl 中看到的,这不是一个选项。请记住,我想在其他服务上执行类似的机制,而不仅仅是 apache,这只是一个示例。

谢谢。

答案1

修改systemd服务文件后,您需要执行以下命令才能重新加载systemd配置:

systemctl daemon-reload

这可能会解决您的更改未执行的问题。但这并不能解决您的主要问题:在服务启动期间添加更多操作。现在您正在尝试使用扩展现有命令&&,但根据系统文档

如果指定了多个命令,则按照命令在单元文件中出现的顺序依次调用这些命令。如果其中一个命令失败(并且不带“-”前缀),则其他行不执行,并且该单元被视为失败。

您还可以使用ExecStartPre=ExecStartPost=线。

相关内容