テクノロジー · 実用ガイド

systemd の status=203/EXEC?実行ファイル、インタープリター、サービス環境を先に証明

シェルで動くコマンドでもサービスは開始前に失敗します。journal を保存し、有効な ExecStart、実行パス、shebang、親ディレクトリ、マウント、ポリシー証拠を unit 環境で調べます。

ExecStart からパス、shebang、サービス環境を経て execve エラー分類へ進むオリジナル図。
オリジナルイラスト:修復前に execve の分類を保存します。 Watch at Ease

status=203/EXEC は systemd が設定プログラムを実行する段階に達したものの、execve が開始できなかったことを示します。ログインシェルとはトークン、作業ディレクトリ、ユーザー、マウント、セキュリティ環境が異なります。

chmod 777、シェルラッパー、ポリシー無効化から始めません。最初の journal とマージ済み unit を保存し、失敗した実行ファイルまたはインタープリターを分類します。

最初の実行証拠を固定

status と最初の journal を保存し、system/--user、unit 名、boot、時刻、203/EXEC 行を記録します。

systemctl cat で unit と drop-in、show で ExecStart、User、Group、WorkingDirectory を取得し、シェルのコマンドと比較します。

実行ファイルと全パスを解決

有効な ExecStart の先頭トークンを取り、リンク、file、namei -l で各親ディレクトリを確認します。無関係な権限は広げません。

スクリプトは先頭行をバイトで読み、shebang の絶対パスと隠れた CR を確認します。インタープリター欠落でも ENOENT になります。

シェルでなくサービス環境を試す

設定ユーザーと作業ディレクトリで試しますが、sudo -u は部分再現です。実 unit は環境、名前空間、能力、可視ファイルシステムも変えます。

実行ファイルとインタープリターに findmnt -T を使い noexec を確認します。通常のパスが通るなら audit AVC と journal を調べます。

証明した境界だけ修復

誤った ExecStart、欠けたインタープリター、shebang、改行、最小限のアクセスを修正します。noexec なら承認済み場所へ移すか所有者と方針を確認します。

SELinux 拒否はラベルと標準場所を先に確認し、原因を分析します。全体 permissive や広い許可規則を近道にしません。

必要なものだけ再読込し一回観測

unit 変更時だけ daemon-reload し、一回開始して直ちに status と新 journal を確認します。

主 PID、子プロセス、作業ディレクトリと実要求を確認し、有効 unit と狭い変更を保存します。

systemd 203/EXEC の安全な判断順序を示すオリジナル図。
オリジナルイラスト:権限変更前に unit と環境を確認します。 Watch at Ease