GNU/Linux >> Linux の 問題 >  >> Linux

cronタイマーはどこにありますか?

cronにアクセスする方法はありますか? タイマーを設定し、crontabでスクリプトが次に実行されるまでの残り秒数を取得します それとも最後から数秒ですか?

承認された回答:

簡単ではありません。 crondはカーネルからのシグナルを待ち、スリープ状態になります。シグナルを受信すると、その分に実行するcronジョブがあるかどうかを確認し、それらを起動してスリープ状態に戻ります。

これは非常に効率的な設計です。cronはスリープ中にCPUを使用しません。時間の経過も意識していません。スリープ状態になると、「登録された」cronジョブからの次のコマンドを実行するまでの時間に基づいて「タイムアウト」が設定されます。

Solaris 10の場合:

sol10-primary:/> # pflags  271  
271:    /usr/sbin/cron
        data model = _ILP32  flags = ORPHAN|MSACCT|MSFORK
 /1:    flags = ASLEEP  pollsys(0x8047c70,0x1,0x8047ce8,0x806ba00)

cronデーモンをトレースしている間、以下のように、タイムアウトでスリープ状態になることがわかります。

waitid(P_ALL, 0, 0x08047CD0, WEXITED|WTRAPPED|WNOHANG) Err#10 ECHILD
time()                                          = 1361952435
pollsys(0x08047C70, 1, 0x08047CE8, 0x0806BA00) (sleeping...)
        fd=3  ev=POLLRDNORM rev=0
        timeout: 105.000000000 sec
        sigmask = 0 0 0 0

cronジョブを更新すると、スリーププロセスもウェイクアップされますが、独自の構成が更新された後、新しいタイムアウト値でスリープに戻ります。

設定されたタイムアウトを確認することができます。 cronがスリープ状態になる直前にtimesyscallを呼び出した(epocからの秒数を返す)ことに注意してください。これを観察した場合(つまり、time()syscallを呼び出したときにプロセスをトレースした場合は、減算できます。現在からの時間で、pollsys呼び出しで設定されたタイムアウトと比較します。

だから…私が言ったように、簡単ではありません。


Linux
  1. Linuxcronコマンドを使用したタスクのスケジューリング

  2. cron / crontabログはどこにありますか? / cronログを有効にする方法は?

  3. マンセクションの内容の説明はどこにありますか?

  1. cronデーモンの内部はどのように機能しますか?

  2. Inittabファイルはどこにありますか?

  3. Crontab ログ:私の Cron スクリプトの出力をログに記録する方法

  1. Rmコマンドが発行されたときにファイルはどこに移動しますか?

  2. サーバーのMySQLタイムアウトを変更する

  3. Linux の itoa 関数はどこにありますか?