Cronジョブを設定するにはどうすればよいですか?

私は定期的に実行するタスクをスケジュールしたいと思っていますが、Cronがこれを行う方法であると聞いたことがあります。

UbuntuにCronジョブを追加するにはどうすればよいですか?

以下のいずれかのフォルダにシェルスクリプトを配置します: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly または /etc/cron.weekly.

これらが十分でない場合は、月に2回または5分ごとに、より具体的なタスクを追加することができます。 端末に移動してタイプします:

crontab -e

これにより、個人用のcrontab(cron設定ファイル)が開きます。 そのファイルの最初の行はそれをすべて説明しています! すべての行で、実行するコマンドとそのスケジュールを定義することができ、フォーマットは非常に簡単です。 構造は次のとおりです:

minute hour day-of-month month day-of-week command

すべての数字については、リストを使用できます。 5,34,55 分フィールドでは、定義されている時間が何であれ、過去5回、過去34回、および過去55回で実行されることを意味します。

間隔を使用することもできます。 それらは次のように定義されています: */20. この例は20日ごとを意味するため、分の列では次のようになります 0,20,40.

そのため、毎週月曜日の午後5時30分にコマンドを実行するには:

30 17 * * 1 /path/to/command

または15分ごとに

*/15 * * * * /path/to/command

曜日は0-6で、0は日曜日であることに注意してください。

あなたは続きを読むことができます ここでは、.

実行したいジョブをユーザーと同じ権限で実行できる場合は、次のコマンドを実行して編集できるユーザー crontabを使用することをお勧めします EDITOR="gedit" crontab -e (これはgeditを使用してcrontabファイルを編集します)または単に crontab -e (これはデフォルトのエディタを使用します)端末で。

たとえば、10分ごとに何かを実行したい場合は、次のような行を追加します

*/10 * * * * /usr/bin/somedirectory/somecommand

ファイルを保存します。

ユーザーのcrontabの内容は次のように表示されます crontab -l.

Rootとして実行されるcronジョブを追加するには、以下を実行してrootのcrontabを編集します sudo crontab -e.

最も柔軟な方法は、システムcrontabを使用することです /etc/crontab これはroot権限でのみ編集できます。 このファイルでは、各コマンドは指定されたとおりに実行されるため、root(そのレベルの特権が必要な場合)またはシステム上の他のユーザーとしてコマン

たとえば、rootとして10分ごとに何かを実行したい場合は、次のような行を追加します

*/10 * * * * root /usr/bin/somedirectory/somecommand

(行へのユーザーの追加に注意してください)

システムのcrontabファイルの内容は次のように表示されます cat /etc/crontab.

より多くの細部で: https://help.ubuntu.com/community/CronHowto

GUIを使用してそれを行うことを好む場合は、ソフトウェアセンターに移動してインストールすることができます スケジュールされたタスク (または実行 sudo apt-get install gnome-schedule). これは、cronタスクを追加するための強力なGUIを提供します。

このメソッドを使用すると、デフォルトではタスクはrootではなく自分のユーザーとして実行されます。 これは通常良いことです。

私はお勧めします KDEのタスクスケジューラ(kde-config-cron) . からアクセスします。 システム設定 の中で、 タスクスケジューラ モジュールがあります。

それは個人的なCrontabsとシステムのCrontabsの両方を管理し、時間境界を作成する容易さは私を大きく驚かせました(下のスクリーンショットを参照)。 私はこの部分は本当に過小評価されていると思います。

Kdeタスクスケジューラは、通常のUbuntuでは動作しません。 KUbuntuのようなKDEシステムでのみ動作します。 KDE以外のシステムでは、gnome-scheduleを使用することをお勧めします

$ sudo apt-get install gnome-schedule

アプリは、ダッシュでタスクをスケジュールされています。

私はbashスクリプトを実行するようにCronジョブを設定したかったので、スクリプトを実行するとcronジョブが追加されます。

私はあなたが利用するときにそれを実現しました:

crontab -e 

次に、ファイルを作成します:

/var/spool/cron/crontabs/root

ここで、rootはcrontabコマンドを実行しているユーザーの名前です。 したがって、これに基づいて、少なくとも14.04では、次のbashコマンドを実行して新しいCronジョブを作成できます:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

また、ファイルの正しい所有権を設定する必要があります:

chown root:root /var/spool/cron/crontabs/root

そして、正しい権限を設定します:

chmod 600 /var/spool/cron/crontabs/root

あなたが実行した場合 crontab -e リストにはすでにCronジョブがあり、次のコマンドを使用してリストに追加できます:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

スクリプトの実行例 test_cron.sh シンボリックリンクを使用してUbuntu18.04上で毎分cronによって:

test_cron.sh ファイル:

#!/bin/bashecho "System backuped" >> /media/myname/data/backup/backup_tmp.log

スクリプトで環境変数を次のように使用したい場合は、次のようにします $USER パスでは、正確なパスを入力する方が良いですが、bashは実行時に変数を認識しません。

myname はユーザー名です(rootグループの一部で、root権限が必要かどうかはわかりません)。

ユーザーがcronジョブを設定できるようにすると、必要に応じてファイルが作成されます:

sudo nano /etc/cron.allowrootmyname

スクリプトへのパスは次のとおりです /home/myname/shell/test_cron.sh

私は所有者を変更し、それを実行可能にしました:

sudo chown myname /home/myname/shell/test_cron.shchmod +x /home/myname/shell/test_cron.sh

シンボリックリンクを追加しました:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

として記録される myname 実行する新しいタスクを追加しました test_cron 毎分。

crontab -e*/1 * * * * test_cron

リスト内のコマンドかどうかを確認するには:

crontab -l*/1 * * * * test_cron

実行を確認するには

grep -i cron /var/log/syslogNov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)

あなたが持っていることを考えると 複数のcronジョブ 特定のユーザーと彼らは同じスケジュールを共有しません。 あなただけの簡単な下のファイルを作成することができます /etc/cron.d/ファイル名は myjobs 次に、そのファイルにすべてのスケジューラを記述し、次のコマンドを実行します。

crontab -u <username> /etc/cron.d/myjobs