Unixシステムに詳しい方なら、タスクを勝手にスケジュールして自動実行できるcronアプリケーションもご存じでしょう。cronとcrontabsを使い始める方法を紹介したチュートリアルもあります。しかし、cronはシステムが24時間稼動している必要があるため、完璧ではありません。もしあなたが夜間にコンピュータの電源を切る習慣があり、cronジョブが睡眠時間にスケジュールされている場合、そのタスクは実行されません。幸いなことに、cronよりも良い仕事をすることができるcron代替ツールがいくつかあります。それらをチェックしてみましょう。

1. Anacron

Anacronはcronと同じように定期的にコマンドを実行するスケジューラーです。唯一の違いは、コンピュータが常に起動している必要がないことです。タスクをいつでも実行できるようにスケジュールすることができます。コンピュータの電源が切れているときは、次にコンピュータの電源を入れたときにタスクが実行されます。

始めるには、anacronをシステムにインストールするだけです。ほとんどのパッケージマネージャで利用可能です。Ubuntuでは、以下のコマンドを使ってインストールしてください。

sudo apt install anacron

Anacronはcronと似たような働きをします。ジョブを /etc/anacrontab ファイルに追加することができます。

ジョブを追加するためのシンタックスは以下の通りです。

period delay-after-computer-start job-identifier コマンドです。

例えば、バックアップスクリプトを毎日実行するには、以下のコマンドを追加します。

1 15 cron.daily /bin/sh /home/ramces/backup.sh

anacronの欠点は、毎日、毎週、毎月のスケジュールでタスクを処理することだけです。時間単位や分単位のスケジュールには使用できません。

2. Cronie

今日インストールできるもう一つの素晴らしいcron代替ツールは、Cronieです。これまでのものとは異なり、Cronieは完全なcron体験を提供することを目的とした、小さなソフトウェア群です。そのために、Cronieはデフォルトでanacronパッケージを含んでいます。つまり、cronieは同期と非同期の両方のジョブスケジューリングを箱から出して提供することができるのです。

さらに、cronieのインストールは比較的簡単です。まず、プログラムのソースコードをGithubページから取得する必要があります。

wget https://github.com/cronie-crond/cronie/releases/download/cronie-1.6.1/cronie-1.6.1.tar.gz

完了したら、ターミナル上でtarを実行してアーカイブを解凍します。

cd ダウンロード
tar xvzf cronie-1.6.1.tar.gz

そこからCronieディレクトリに移動して、プログラムのソースコードをコンパイルします。

cd cronie-1.6.1/
./configure
make
sudo make install

これで、Cronie を使ってマシンの cron ジョブを管理できるようになりました。anacron や cron と同様に、crontab -e を実行することで cron ジョブを作成することができます。これにより、特定のユーザーの crontab を編集することができます。それを知った上で、Cronieも標準的な書式に従います。

\* ■■■■■■ 0 /your/command/here

3. fcron

Fcronはcronとanacronのいいとこ取りのツールです。Fcronはcronとanacronの良いとこ取りのようなもので、24時間365日コンピュータが動いている必要はありませんし、時間単位や分単位でタスクを処理することができます。

Fcronをインストールする唯一の方法は、ソースファイルをダウンロードし、自分でコンパイルすることです。

  1. ソースファイルはこちらからダウンロードしてください。
    1. アーカイブを解凍します。ターミナルを開き、解凍したアーカイブのフォルダにファイルパスを変更する。
  2. 3.以下のコマンドを実行します。
./configure
make
sudo make install

インストール中にいくつかの質問をされますが、すべて “y”(はい)と答えて大丈夫です。

fcronジョブの作成を開始するには、ターミナルでfcron -eと入力するだけです。

fcronのシンタックスはcronと似ています。

分 時間 日 月 日 週 実行されるコマンド

で、cronよりも多くのオプションがあり、例えば、ある時間範囲内で実行するタスクを設定することができます。

GUIが好きな人は、fcronqをチェックアウトすることができます。

4. bcron

Bcron は標準的な cron プログラムのシンプルでモダンな代替品です。Cronie と同様に、bcron はシステムのジョブスケジューリングを管理する ソフトウェアスイートを提供することを目的としています。これは、cronの全てのコンポーネント機能をそれぞれのプログラムに分離することで実現されています。これにより、bcronは高度にモジュール化され、かつ安全であることができます。

これで、bcronのインストールは信じられないほど簡単になりました。DebianやUbuntuを使用している場合、aptを通してプログラムをインストールすることができます。

sudo apt install bcron

完了したら、bcronを使ってシステムのタスクをスケジュールすることができます。そのためには、まず以下のコマンドを実行して、プログラムを有効にする必要があります。

envdir /etc/bcron bcron-start
envdir /etc/bcron bcron-update /etc/crontab /etc/cron.d

最初のコマンドはシステム内でbcronを起動し、2番目のコマンドはbcronにcrontabとcron.dの両方のファイルを開いて更新するように指示します。そこから、新しいタスクを作成する構文は、anacronとcronieの両方に似ています。例えば、毎月1日の午前5時に私のスクリプトを実行するようにbcronに指示するために、次の行を書くことができます。

0 5 1 \* /my/monthly/script.sh

5. Hcron

Hcron は比較的知られていませんが、だからといって有用性が低いわけではありません。Hcronは比較的知られていますが、だからといって有用性が低いわけではありません。実際、ユニークな機能がいくつか備わっています。例えば、cronタイプのジョブに簡単にラベルを付けて整理したり、コンピュータのネットワークやユーザーのcrontabファイルを管理したり、簡単にbeck upしたり、cronタイプのジョブをバージョン管理したりすることが可能です。

hcronをインストールするには、.debファイル(または.rpmファイル、あなたのLinuxシステムによって異なる)をダウンロードし、システムにインストールします。

Hcronは、各イベントをプレーン・テキスト・ファイルとして保存します。開始するには、単にコマンドでテキスト・ファイルを作成します。

hcron-イベント/パス/to/イベント-ファイル.txt

開いたテキストエディタで、イベントの詳細を記入することができます。

hcronでできることは他にもたくさんあります。hcronがどのように動作するかをよりよく理解するために、ユーザーガイドをダウンロードすることをお勧めします。

6. Jobber

Jobber は GO で書かれたタスクスケジューラであり、cron よりも強力なツールです。ジョブの実行履歴やステータス、失敗したジョブをいつ再実行するかの制御、失敗したジョブの通知、失敗を繰り返したために無効になったジョブについてのみ通知されるなどの機能があります。

Jobberをインストールするには、GOがシステムにインストールされていることを確認する必要があります。次に、次のコマンドを入力してください。

cd /path/to/your/go/workspace
go get github.com/dshearer/jobber
make -C src/github.com/dshearer/jobber

インストールが完了したら、コマンドでJobberを起動します。

sudo /usr/local/sbin/jobberd start

ジョブを作成するには、ホームディレクトリに “.jobber” という名前のファイルを作成し、以下のフォーマットでジョブを追加してください。

- という名前をつけてください。#ここにジョブ名を入力
  cmd #実行するコマンド
  時間 #クーロン形式と同じ
  onError: #停止|バックオフ|継続
  notifyOnError: #false(偽)|true(真
  notifyOnFailure: #偽|真

この書式からわかるように、エラー発生時の動作(“Stop”, “Backoff”, “Continue” )と、失敗時の通知を行うかどうかを定義することができます。

ジョブリストを更新したら、jobber reload を使ってジョブバーに新しいリストを再読み込みさせてください。

いつでも jobber log を使って最近実行されたジョブの一覧を見ることができます。

7. mcron

Mcron は Linux 用の高速で革新的なタスクスケジューリングプログラムです。上記のプログラムと同様に、mcron はシステムで実行したいスクリプトやプログラ ムを管理するための簡単な方法を提供することを目的としています。上記のプログラムとは異なり、mcron は cron ジョブをゼロから再構築することで、タ スクスケジューリングを再定義することも目的としています。

以上により、mcronのインストールは驚くほど簡単です。DebianとUbuntuの両方で利用可能で、以下を実行することで簡単に入手することができます。

sudo apt install mcron

インストールが完了したら、mcronをスケジューラとして使用することができます。そのためには、まずmcronがタスクを探すためのディレクトリを作成する必要があります。

mkdir /home/$USER/.config/を作成します。
touch /home/$USER/.config/cron

そこから、このcronファイルを編集して、mcronにさせたい全てのジョブを含むことができます。上記のプログラムとは異なり、mcronはスケジューリングのために別のシンタックスを使用します。

(job '(タイプ '(範囲)) "コマンド")

これで、1日に3時間、1時間に1回スクリプトを実行するために、.config/cronファイルに次のように記述することができます。

(job '(次の時間 '(1 4 8)) "my-script.sh")

Frequently Asked Questions (よくある質問)

mcronで通常のcron構文を使用することは可能でしょうか?

革新的なタスクスケジューラーであることはもちろんですが、mcronは古いcron構文との後方互換性を目指しています。そのため、.config/cronファイルにはcrontabのような構文も使用できます。例えば、私は以下の行を書き、mcronに1日1回、午前0時までにスクリプトを実行するように指示することができます。

0 0 0 ¦ /path/to/my/script.sh

ただし、この方法でスケジュールタスクを作成すると、mcronのより広範で柔軟な機能を使用することができません。

cronが私のユーザーアカウントにメールを送るのを止めることは可能ですか?

cronがあなたのユーザーにシステムメールを送るのを止めることは可能です。そのためには、crontabを編集して MAILTO 変数を nobody という値で指定する必要があります。例えば、これは私がシステムメールを無効にしたクーロンタブの抜粋です。

MAILTO=nobody
\* MAILTO=nobody。
0 0 0 ╱╱╱╱ /second/script/here.sh

これを知っていれば、この構文を使って別のユーザーのcrontab出力をリダイレクトすることも可能です。例えば、rootユーザのcrontabにこの変数を設定すれば、rootユーザが実行しているすべてのスケジュールされたタスクの出力を簡単に取得することができます。

どのcronの代替ソフトが一番良いですか?

これは非常に主観的な質問ですが、良いcronの代替は、あなたの特定のユースケースに必要かもしれないすべてのことを行うことができるはずです。例えば、もしあなたがcronを時折の基本的なタスクにしか使わないつもりなら、anacronやcronieのようなよりシンプルなタスクスケジューラの使用を検討した方がいいかもしれません。

一方、mcronのようなより柔軟で強力なタスクスケジューラでは、cron自体の動作をスクリプト化して定義することができる。しかし、基本的なタスクにさえmcronを使うのは、不慣れな初心者には敷居が高いかもしれません。

画像引用元:Unsplash

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。