Linux【Linux】crontabの設定はcron_event_predict.plxで確認すべし侍テック編集部2018/6/142019/12/5cronやcrontabという言葉を聞いたことがありますか?cronやcrontabについて知っていることを聞いてみると、きっと以下のような答えが返ってくると思います。・Linuxで定期的にジョブを実行するために使用するソフトウェア・設定方法が難しい・正しく設定できたかどうかを確認することが難しい・設定を間違えたときの影響範囲が大きいので、設定を変更するのが怖いそこで、この記事ではcron/crontabについてザックリ説明したあとで、設定を確認するためのPerlスクリプト(懐かしくないですか!?)を紹介します!このPerlスクリプトを日本語で取り上げるのは、この記事が初めてだと思います。#Googleで言語指定無しで検索しても、そもそも65件しかでてきませんでした。まとめcron/crontabとはcronもcrontabも、Linuxで定期的にジョブを実行するために使用するソフトウェアです。以下のような役割分担になっています。cronのスケジュール設定を担当するソフトウェアcronが動作しているか確認しよう何はともあれcronデーモンが動作していないと、定期実行はされません。一般的にはLinuxディストリビューションをインストールすれば、cronデーモンが自動的に起動するはずですが、念の為確認しましょう。...」と表示されれば動作しています。ago(省略)Linuxディストリビューションによっては、以下のコマンドで動作を確認しましょう。statusこちらは動作していると以下のように表示されます。running...動作する日時を設定しようcronデーモンが動作していることが確認できたら、実際に設定を書いてみましょう。-rの実行事故を防ぐために)様々な流派があるようです。filenameコマンドで反映する派」です。別途設定ファイルを作成しておくことで、以下のようなメリットがあります。gitを使ってバージョン管理できる(間違えても苦もなく戻せます)PerlのSchedule::Cron::Eventsモジュールで動作予定を予測できる(後で紹介します)設定書式は?確認方法を紹介する前に、まずは設定方法を簡単に説明しておきましょう。Xfceエディションに初めからインストールされているテキストエディタ(xed)で設定ファイルを書いてみました。*」部分の意味を説明しましょう。(任意)曜日」と読み、つまり毎日15時0分になったら何かを実行するという意味です。cronlog.txt」で、実行時刻と「固定指定の例」をcronlog.txtに出力するイメージです。(任意)曜日」と読み、つまり毎日2時5分と2時10分になったら何かを実行します。(任意)曜日」と読み、つまり毎日2時5分、3時5分、4時5分、5時5分になったら何かを実行します。(任意)曜日」と読み、つまり5分間隔で何かを実行します。最後の間隔指定は、他の記事とは少し違うことが書いてありますので、注意してください。下の黒枠内をゆっくり丁寧に読んでください。*」と書いた場合、本当に「7分間隔」なら、次のように動作するはずです。0時0分、7分、14分、...、49分、0時56分、1時3分(0時56分の7分後)、...ですが、実際は次のように動作します。0時0分、7分、14分、...、49分、0時56分、1時0分(0分に戻る。ここだけ4分間隔)、...ちょっと、直感的ではありませんね。7分間隔だけでなく、11分間隔とか、25分間隔とか、60を割り切れない時間間隔を設定するときにハマりがちですので、気をつけましょう。PerlのSchedule::Cron::Eventsモジュールを使って確認しよう複雑な例だと以下のような書き方も許容されます。cronlog.txtさてみなさん、これがいつ実行されるか、正しくわかりますか?私はまったく自信がありません!(断言)実は、こういった複雑な例も動作予定を推測してくれるSchedule::Cron::EventsモジュールというPerlモジュールが用意されています。これを利用しているPerlスクリプトがGitHubで公開されています。Xfceエディションで動作を確認していますが、他のLinuxディストリビューションでも概ね同じだと思います。(1)以下のコマンドを入力して、必要なパッケージをインストールします。libschedule-cron-events-perl(2)以下のコマンドを1行ずつ順番に入力して、cron_event_predict.plxをダウンロードし、実行権限を付与します。Mintでも動作するように修正し、バグを修正して(笑)、ついでに日本人が読みやすいように出力を変更します。$!";「’」を「”」に変更するのが主な修正です。※@wdは、変更後(3)で使っています。$min);(4)任意のテキストエディタで、test_complexファイルを作成し、以下の内容を入力します。cronlog.txt(5)以下のコマンドを入力し、実行予定を確認します。test_complex以下のように表示されたでしょうか。eventあれ、曜日のところに「0」を指定したので、第1日曜日だけ実行されるかと思ったらだいぶ違いますね。このように、cron_event_predict.plxを使用すると、ミスも発見できるので超おすすめです(汗)コマンド部分の入力内容を確認する設定ファイルの各行の前半部分(日時指定のところ)は、確認する方法がわかりました。今度は、後半部分(コマンド指定のところ)をどのように確認すればよいでしょうか。残念ながら入力したコマンドをcronが正しく認識できるか確認する方法はなさそうです。実際にcronが実行するのを待つしかないんですね...。気をつけたいのは1点だけです。%(パーセント記号)は、\(円マーク)でエスケープする必要があります。+%Y%m%d`.txtcrontabの設定ファイルに書き込むときに、%(パーセント記号)の直前に\(円マーク)を挿入します。+\%Y\%m\%d`.txtこれで問題なく動作するでしょう。設定ファイルをcrontabに反映する任意のテキストエディタで作成した設定ファイル(test1ファイルとします)を、cronに反映するには、以下のコマンドを入力します。test1安全に運用するなら、test1をgitで管理するといいでしょう。2018年2月2日まとめ今回は、任意のコマンドを定期的に実行できるcron/crontabを紹介しました。実行タイミングの設定内容を確認することが難しいので、そのためにGitHubで公開されているcron_event_predict.plxを少し変更して使用する方法を紹介しました。cron/crontabの設定を確認することは、非常に厄介ですが、日付部分(実行タイミング)だけでも確認できると安心感が違うのではないでしょうか?cron_event_predict.plxは、日本語のサイトでは紹介されていないようですので、本邦初公開ですね!(言い方が古い)ぜひお試しください。TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。