Linux

獲取失敗的 systemd 服務的退出程式碼

  • May 26, 2020

如何獲取失敗的 systemd 服務的退出程式碼?

service some_service status列印以下內容:

Active: failed (Result: exit-code)

但那是什麼exit-code

這些退出程式碼是標準的還是它們對不同的服務有不同的含義?

systemctl status確實有你要找的東西:

$ systemctl status openproject-web-1.service
● openproject-web-1.service
  Loaded: loaded (/etc/systemd/system/openproject-web-1.service; enabled; vendor preset: enabled)
  Active: failed (Result: exit-code) since Mon 2020-05-25 08:17:17 CEST; 1 day 4h ago
 Process: 969 ExecStart=/usr/bin/openproject run web (code=exited, status=203/EXEC)
Main PID: 969 (code=exited, status=203/EXEC)

你看這裡下Main PID:你有(code=exited, status=203/EXEC)。那 203 是退出程式碼。

退出程式碼取決於特定的應用程序,但有約定。0為成功退出,1-255為異常退出,256+為超出範圍。posix 標準有一些特殊情況。但是您需要查看應用程序的文件以獲取更多資訊。

例如,grep(1)說:

…如果選擇了一行,則退出狀態為 0,如果未選擇任何行,則退出狀態為 1,如果發生錯誤,則為 2

正如下面 JdePB 所描述的,systemd 可能會在 200 到 242 的範圍內自行設置一些退出程式碼。在上面的範例中,我們有退出程式碼203,這意味著實際執行失敗(可能找不到文件或未將文件標記為執行檔)。

引用自:https://unix.stackexchange.com/questions/589028