テスト/デバッグのために、どのようにしてcronを今すぐジョブに実行させることができますか?スケジュールを変更せずに!


134

スケジュールを変更する以外に、毎日実行するようにスケジュールされているcronジョブがあります。コマンドをテスト実行して、意図したとおりに動作するかどうかを確認する他の方法はありますか?


あなたの質問がわかりませんか?単純にコマンドを実行しないのはなぜですか?
-favadi

21
(私のシェル)シェルに入力したとき、私は、コマンドの作品を知っているが、私はそれが時に動作するかどうかを知りたいcron、それを実行し、それはENVの影響を受けたり、特定のもの(シェルすることができ~、拡張)、または所有権とアクセス権のものをか...
アリ

2
それでは、同じコマンドで毎分実行される新しいcronジョブを作成してみませんか?
favadi

13
これはまさに私がやったことですが、cronにjob no 7でテストを実行したいことを伝える方法があるかどうか疑問に思いました!確かに他の人が以前にこの問題/リクエスト/希望を持っていました!
アリ

4
グーグルを介してこのシーンに非常に遅れましたが、ファバディの返信についてはすべて間違っていました。彼がcronからテストすることを望んでいたことは明らかでした。ユースケースを理解しようとしていないときに、あなたが望むことを誰かが間違っていると言うよりも少し悪い。
HörmannHH

回答:


32

私が知る限り、cronには特定の時間にスケジュールコマンドを実行するという特別な目的があるため、直接行う方法はありません。したがって、最良の方法は、crontabエントリを手動で作成するか、環境を削除してリセットするスクリプトを作成することです。


57

次のコマンドを使用して、crontabを強制的に実行できます。

run-parts /etc/cron.daily

9
... OPのcronジョブ(3年前に求められた)が個々のcrontabではなくcron.dailyにあるという前提で。
ジェフシャラー

18
ただし、これはcronユーザーの環境を完全にシミュレートするものではないため、実際のcronジョブとしてスクリプトを実行すると、PATHやその他のenvvarsはユーザーとは異なる可能性があるため、依然としてバグが存在する可能性が高くなりますrun-parts /etc/cron.daily。スクリプトは問題run-partsなく実行できますが、実際にはcronユーザーで実行すると失敗するため、このバグと今闘っています。
-ArtHare

42

「cronジョブの手動および即時実行」で説明されているように、cronユーザー環境をシミュレートできます。これにより、cronユーザーとして実行されるジョブの動作をテストできます。


リンクからの抜粋:


ステップ1:ユーザーのcrontabにこの行を一時的に配置します。

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

ファイルが書き込まれたらそれを取り出しました。

ステップ2:自分自身を次のような小さなrun-as-cron bashスクリプトにしました。

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "$@"

それで、問題のユーザーとして、私はできました

run-as-cron /the/problematic/script --with arguments --and parameters

役に立つトリック。もちろん、コマンドにパーセント記号がある場合、それは役に立ちません。
-basic6
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.