應用程序 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
如您所見,我使用 && 來分隔命令。我正在嘗試尋找幫助調試服務輸出的方法。
進行此更改後,當我執行“
systemctl start httpd.service
”命令時,系統仍在啟動 apache。但是,它給出了一個錯誤,說明啟動文件已被修改(這很好),但是看起來它從另一個未知位置拉出了實際的啟動行,因為文件 /root/out.txt 甚至從未創建過。如果有人能給我更多關於為什麼會發生這種行為的資訊,我將不勝感激。過去在新的 systemd/systemctl 之前,我會使用以下命令來觀察啟動腳本在類似情況下所做的事情:
bash -X /etc/init.d/httpd start
正如您在 systemctl 中看到的那樣,這不是一個選項。請記住,我想在其他服務上做類似的機制,而不僅僅是 apache,這只是一個例子。
謝謝。
修改 systemd 服務文件後,您需要執行以下命令以重新載入 systemd 配置:
systemctl daemon-reload
這可能會解決您的更改未執行的問題。但這不會解決您的主要問題:在服務啟動期間添加更多操作。現在您正在嘗試使用 擴展現有命令
&&
,但根據systemd 文件:如果指定了多個命令,則按照它們在單元文件中出現的順序依次呼叫這些命令。如果其中一個命令失敗(並且沒有以“-”為前綴),則不會執行其他行,並且該單元被視為失敗。
您也可以使用
ExecStartPre=
和ExecStartPost=
線。