确切的文件位置是:
/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=
线。