コンテンツにスキップ

cron と systemd timer の両方から、高権限で定期実行される処理を確認する。timer の有無に加え、呼び出し先が読むディレクトリと環境変数を調べる。

unit の読み方はプロセスと systemd。呼び出し先が user-writable path を読む場合はroot が読む書き込み可能パスに進む。

追加確認例:

ターミナルウィンドウ
cat /etc/crontab
ls -la /etc/cron.*
systemctl list-timers --all
systemctl cat <timer>
systemctl cat <service>
  • 目的: 実行ユーザー、周期、呼び出す script、その script が依存する path を確認する。
  • 前提条件: user 権限では、一部の unit や cron spool が読めないことがある。
  • 何を確認しているか: 実行ユーザー、ExecStart, OnCalendar, PATH、working directory、相対パス、ワイルドカード、書き込み可能な script と config。
  • 期待される出力: User=root, EnvironmentFile=/etc/<app>.env, /bin/bash /opt/<app>/monitor.sh。
  • 出力の解釈: root が user-writable directory を巡回するなら権限境界。timer 名と service 名が一致するとは限らない。
  • 失敗した場合の切り分け: timer はあるが service が別名、oneshot で一瞬だけ実行、container 内で systemd がない、cron の PATH が想定と違う。
  • 代替コマンド: ls -la /var/spool/cron /var/spool/cron/crontabs 2>/dev/null, grep -Rni <app> /etc/systemd /etc/cron* 2>/dev/null。
  • 状態変更: 読み取り専用。

root 権限の timer が書くファイルを sudo で実行した処理が読むなら、両方の権限をつなぐ経路になる。定期実行が見つからない場合や sudo が拒否された場合も、localhost の高権限サービスを調べる。見つけ方はネットワークと IPCを参照する。