CronとCrontabを使用してLinuxでタスクをスケジュールする方法

CronとCrontabを使用してLinuxでタスクをスケジュールする方法

知ってた ブレードランナー 2019年に設定されていますか?それは今から3年です!言うまでもなく バック・トゥ・ザ・フューチャー2 、2015年にタイムトラベルします。それでも、私たちには空飛ぶ車がなく、レプリカントもありません(私が知る限り)。





未来の架空の描写と比較すると、現在のテクノロジーに失望するのは簡単です。それでも、最近、私たちの電話、コンピューター、そして家でさえ、驚くべきことをすることができます。タスクを自動化する機能はその1つです。





すべてのLinuxユーザーは、システム関連(古いログのクリーンアップや パッケージの更新 )またはユーザーにサービスを提供します(電子メールのチェック、ポッドキャストのダウンロード...)。 WindowsユーザーはWindows95以降タスクスケジューラを使用しています。Linuxで同じジョブを実行するユーティリティはcronと呼ばれます。ここでは、その使用方法について説明します。





Rainmeterスキンの作り方

cronとは何ですか?

Cronは、バックグラウンドで実行され、スケジュールされたタスクをチェックし、見つかった場合はそれらを実行するシステムサービスです。タスク(「cronジョブ」とも呼ばれます)は、cronが毎分スキャンする特別な構成ファイル(crontab)で定義されます。 cronのいくつかのバージョンは、さまざまなLinuxディストリビューションにあります。たとえば、Fedoraのcronのフォークは クロニー 、そしてもあります fcronbcron 、 と dcron 。追加の機能を備えているものもあれば、セキュリティに重点を置いているものもありますが、それらはすべて同じアイデアに基づいています。

このガイドは、cronの最も普及しているバージョンであり、Ubuntuとその派生物にあるvixie-cron用に書かれています。ほとんどの手順は他のcron実装にも適用されますが、わずかな違いがある可能性があるため、切り替える場合はマニュアルを確認してください。



Crontabとは何ですか?

あなたがあなたの時間を管理することを真剣に考えているなら、あなたはおそらくある種のカレンダーを持っているでしょう-アプリか少なくとも一枚の紙。 Crontabは、コンピューターのカレンダーに非常によく似ています。スケジュールされたタスクに関する情報を保持し、どのコマンドをいつ実行するかをcronに指示します。

実際、システムにはいくつかのcrontabがあります。すべてのユーザーには、root(管理者)を含む独自のcrontabがあります。ユーザーのcrontabはに保存されます





/var/spool/cron/crontabs/

。 NS

crontab -l

コマンドは、現在のユーザーのcrontabファイルを一覧表示します。ルートcrontabは次のコマンドで確認できます





sudo crontab -l

さらに、システムのcrontabファイルがあります

/etc/crontab

これは、システム全体のタスクに使用されます。通常、これらは実行可能なルート所有のスクリプトの形式を取ります。

/etc/cron.hourly/

/etc/cron.daily/

/etc/cron.weekly/

、 と

/etc/cron.monthly/

フォルダ、および一部のディストリビューションでは、

/etc/cron.d/

フォルダも。一般的に言って、これらのタスクのほとんどはインストールされたアプリケーションによって自動的に作成されるため、これらのタスクを処理する必要はありません。

cronでタスクをスケジュールする方法

簡単そうに聞こえます。タスクをスケジュールするには、タスクをcrontabに追加するだけです。 crontabは特別な構成ファイルであるため、手動で編集することはお勧めしません。代わりに、

crontab -e

指図。 rootまたは他のユーザーのcrontabを編集するには、管理者権限でコマンドを実行し、-uオプションの後にユーザー名を追加します。

sudo crontab -u root -e
sudo crontab -u username -e

crontabファイルには2つのセクションがあります。最初のものには、自動的に設定される環境変数が含まれています。 PATH、HOME、およびSHELL変数を安全に変更し、MAIL変数を変更できます。

ファイルの2番目の部分は、スケジュールされたタスクを含む実際の「タイムテーブル」です。すべてのタスクはテーブルの行(行)を占め、列は次の値を表します。

タスクを正常にスケジュールするには、crontab構文について少し知っておく必要があります。

  • 数値は整数(整数)である必要があり、任意の列のアスタリスク(*)をワイルドカードとして使用できます。これは、「毎分/日/月...」を意味します。
  • [日]列では、[月]列で指定された月(たとえば、2月30日)に発生しない日付を設定しないように注意してください。
  • 「Month」列と「DayofWeek」列はどちらも、それぞれ月と日の短い名前を受け入れ、大文字と小文字は区別されません。
  • 「曜日」列では、0と7の両方が日曜日を表します。 「時間」列には「軍事時間」(24時間)形式が必要ですが、数値24を使用することはできません。代わりに、0は午前12時を表します。これは、分、時間、曜日の値が開始するためです。 1ではなく0で。
  • 秒はサポートされていないため、特定の秒でタスクをスケジュールすることはできません。

ハイフンを使用して包括的時間範囲をスケジュールするか(「時間」の下の14〜22は、午後2時から午後10時までタスクを継続的に実行します)、またはコンマ区切りのリストを定義して1つのタスクを数回実行します(1、 「曜日」の下の3,5は、月曜日、水曜日、および金曜日にタスクを実行します。

一方、ステップ値はスラッシュ(/)で表され、これらは範囲内のスキップの量を示します。たとえば、「時間」の下の3-20 / 3は、午前3時から午後8時まで3時間ごとにタスクを実行します。これは、アスタリスクとステップ(* / X)を組み合わせることができるため、X時間ごとにタスクを繰り返す場合に役立ちます。数値を使用している限り、範囲とリスト、およびステップと範囲を組み合わせることができます。つまり、「jan-mar」や「Tue、Fri-Sun」のような組み合わせは許可されていません。

または、すべての列に値を設定する代わりに、行の先頭に@ weekly、@ yearly、@ monthly、@ daily、または@hourlyを記述し、その後にコマンドを入力することもできます。このようにスケジュールすると、タスクは最初の可能なインスタンスで実行されるため、@ weeklyは週の最初の日の深夜に実行されます。システムが(再)起動した直後にタスクを実行する場合は、@ rebootコマンドを使用します。

この例では、毎日08:20と20:20にバックアップをスケジュールしています。壁紙は3日ごとの19:00に自動的に変更され、スクリプトは毎週月曜日の10:20と20:20に新しいポッドキャストをチェックします。誕生日のリマインダーは3月25日に設定され、指定された時間枠内で30分ごとに実行されます。最後に、スクリプトは8時から20時まで15分ごとに電子メールをチェックしますが、平日のみです。 crontabは、スペースと列間のタブで自由に編成できますが、列内では編成できません(コンマ、ハイフン、スラッシュの間にスペースを入れないでください)。

これらすべてが複雑すぎるように聞こえても、心配しないでください。いつでもインターネットに頼ることができます。のようなツール CrontabジェネレーターCrontab.guru 、およびCorntabは、crontab構文を知らなくてもcronジョブを作成するのに役立ちます。これらは、ジョブが次に実行されるタイミングを示し、一般的に使用される式のテンプレートを提供します。 Crontab.guruは、crontab構文をライブテストできるため、最高のものです。変更がスケジュールにどのように影響するかをすぐに確認できます。

cronジョブが実行されているかどうかを確認する方法

Cronはバックグラウンドで静かに実行され、タスクを処理している間、邪魔されずに作業できるようになっています。しかし、実際に機能していることをどのように確認できますか?

Cronには電子メール通知機能が組み込まれていますが、これには少なくとも単純なローカルメールサーバーを設定する必要があります。これを構成することをいとわないホームユーザーは多くなく、デフォルトで提供しているディストリビューションも多くありません(たとえば、Ubuntuは提供していません)。 cronをチェックする最も速い方法は、次のコマンドでシステムログをスキャンすることです。

cat /var/log/syslog | grep -i cron

-iオプションを使用すると、クエリで大文字と小文字が区別されなくなります。 cronが独自のログファイルをどこかに持っている可能性があります

/var/log/

、したがって、このコマンドで有用な結果が得られない場合は、そこを調べてください。

特定のcronジョブの出力を保存する必要がある場合は、それをファイルにリダイレクトできます。実行するコマンドの後に、crontabの最後の列にファイルのパスと名前を入力します。

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

単一の>記号を使用すると、コマンドが実行されるたびにファイルが上書きされます。これを回避するには、代わりに>>を使用します。これにより、既存のファイルに出力が追加されます。

cronが機能していない場合はどうなりますか?

いくつかのタスクを追加し、システムログを確認したところ、タスクが正常に実行されていないことが判明した可能性があります。問題を解決しようとするときに考慮すべきいくつかの事柄があります-そして注意してください-。

cronサービスは実行されていますか?

ご存知のように、cronデーモンはバックグラウンドで実行されている必要があります。これが実際に当てはまることを確認してください。このサービスは、crondまたは単にcronと呼ばれます。

systemdを使用したディストリビューションの場合:

systemctl status cron

Upstartを使用するディストリビューションの場合:

service cron status

ディストリビューションが「古い」SystemV initアプローチを使用している場合は、すべてのサービスを次のようにリストします。

プロセスを強制的に終了する方法
initctl list

cronがリストされているかどうかを確認します。

crontabファイルを持つことさえ許可されていますか?

あなたの

/etc

名前の付いたファイルのフォルダ

cron.allow

cron.deny

。 Ubuntuでは、どちらも存在しないはずです。つまり、すべてのユーザーがcronジョブを管理できます。ただし、

エラーがメインクラスmainを見つけられないかロードできませんでした
cron.allow

ファイルには、ユーザー名が含まれている必要があります。逆に、

cron.deny

ファイルが存在する場合、ユーザー名はその中に含まれていてはなりません。離れる

cron.deny

ファイルが空白の場合は、にリストされているrootとユーザーのみが

cron.allow

crontabファイルを持つことができます。

変数は適切に設定されていますか?

Crontabは、SHELL変数を自動的に次のように設定します。

/bin/sh

。ただし、 あなたの選択の殻は魚です またはbashの場合、SHELL変数を変更する必要があります

。同様に、PATH変数には、デフォルトで少数のディレクトリしか含まれていません。これは、crontabがLinuxコマンドを探す場所です。 cronジョブの実行に失敗する場合は、crontabが使用したコマンドを「認識しない」ことが原因である可能性があります。これを回避するには、コマンドを含むディレクトリをコロンで区切ってPATH変数に追加します。

PATH = / opt / myapp / bin:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin

crontabでこれを編集したくない場合は、cronジョブとして実行するスクリプトでこれらの変数を定義できます。

crontabのフォーマットは適切ですか?

Crontabの構文は、正確にスムーズな航海ではありません。前述のオンラインツールで確認したとしても、小さな間違いでcronがジョブを実行できなくなる可能性があります。次の点に注意してください。

  • crontabファイルの最後に空の行を追加します
  • コマンドに%記号が含まれている場合は、バックスラッシュで%記号をエスケープします
  • コメントは#で始まる個別の行として記述します。環境変数と同じ行、またはcronジョブコマンドの横にコメントを書き込まないでください。

あなたは本当にターミナルを使わなければなりませんか?

絶対違う。 KDEユーザーは、KCronを使用してcronジョブをスケジュールできます。KCronは、 システム設定>タスクスケジューラ モジュール。 KCronは、マウスを数回クリックするだけですべてを選択して微調整できる簡単なインターフェイスを備えており、使用するのが楽しいです。

GNOMEを好む場合は、 GNOMEスケジュール あなたのためです。アプローチは似ていますが、インターフェースは予想通りわずかに異なります。きめ細かい変更のための高度なモードを提供し、タスクを直接管理できるパネルアプレットが付属しています。

次のような他の解決策に注意する必要があります Crontab-UIミニクロン 。これらは、複数のマシンとcronジョブを管理するユーザーに適しています。最も優れた機能の1つは、Webベースのインターフェイスです。

cronの代替手段はありますか?

cronはLinuxのほぼ標準的なタスクスケジューラですが、それだけではありません。 NS コマンドで 特別な構成ファイルなしで、コマンドラインから直接スケジュールできる迅速な1回限りのジョブに最適です。さらに必要な場合は、 GNUbatch 、依存関係の概念を導入します。 GNUbatchを使用すると、すべてのジョブに特定の条件を設定したり、スケジュールされたタスクを前のタスクに依存させたりすることができます。同様のことはで達成することができます システムタイマー 。 cronよりも構成するのは実用的ではありませんが、systemdタイマーは、コンピューターの電源がオフのときにタスクがスケジュールを逃したかどうかを記憶し、次にオンになったときに実行します。

これは、cronが単独で実行できないことです。そのため、常に実行されているサーバーやコンピューターには適していますが、コンピューターの電源がオフのときにスケジュールされたジョブは実行されません。これはどこです anacron 登場します。技術的には、「代替」またはcronの代替ではありません。代わりに、anacronはcronを補完するものであり、それと一緒に使用する必要があります。これは、UbuntuやUbuntuベースの製品を含む多くのLinuxディストリビューションに当てはまります。 Anacronは、タスクが最後に実行された日時をログに記録し、システムの電源がオフになっているときにインスタンスが欠落していないかどうかを確認します。コンピューターの電源を入れると実行されますが、すべてのタスクは1日に1回だけ実行できます。

fcronなどの一部のバージョンのcronは、デフォルトでanacronの機能を提供します。上級ユーザーは見たいかもしれません Hcron また スーパークロン 、これは基本的なcron関数に多くの改善をもたらしますが、管理もやや困難です。

あなたはどうですか?デジタルタスクをどのように整理しますか? Linuxでどのタスクをスケジュールしますか?コメントでcronを使用するためのストーリーとヒントを共有してください。

画像クレジット: スケジュールボード ゴンサロ・アラゴン、Shutterstock経由

共有 共有 つぶやき Eメール YouTubeよりも優れている12のビデオサイト

こちらがYouTubeの代替ビデオサイトです。それらはそれぞれ異なるニッチを占めますが、ブックマークに追加する価値があります。

次を読む
関連トピック
  • Linux
  • Linux
著者について Ivana Isadora Devcic(24の記事が公開されました)

Ivana Isadoraは、フリーランスのライター兼翻訳者であり、Linux愛好家であり、KDEファンの女の子です。彼女は無料のオープンソースソフトウェアをサポートおよび宣伝しており、常に新鮮で革新的なアプリを探しています。連絡方法をご覧ください ここ

Ivana IsadoraDevcicのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください