web-dev-qa-db-ja.com

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

タスクを定期的に実行するようにスケジュールしたいのですが、Cronがこれを実行する方法だと聞きました。

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

534
Gabriel Solomon

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

これらで十分でない場合は、より具体的なタスクを追加できます。月に2回または5分ごと。ターミナルに移動して、次を入力します。

crontab -e

これにより、個人のcrontab(cron構成ファイル)が開きます。そのファイルの最初の行ですべてを説明しています!すべての行で、実行する1つのコマンドとそのスケジュールを定義できます。また、形式を簡単に理解できます。構造は次のとおりです。

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は日曜日です。

もっと読むことができます こちら

652
LassePoulsen

実行したいジョブがユーザーと同じ権限で実行できる場合、EDITOR="gedit" crontab -e(geditを使用してcrontabファイルを編集します)または単にcrontab -e(デフォルトのエディターを使用します)ターミナルで。

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

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

ファイルを保存します。

crontab -lを使用して、ユーザーcrontabの内容を表示できます。

ルートとして実行されるcronジョブを追加するには、Sudo crontab -eを実行してルートのcrontabを編集できます。

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

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

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

(行へのユーザーの追加に注意)

システムcrontabファイルの内容は、cat /etc/crontabで確認できます。

詳細: https://help.ubuntu.com/community/CronHowto

101
Li Lo

GUIを使用して行う場合は、ソフトウェアセンターにアクセスして、スケジュールされたタスクをインストールするか、Sudo apt-get install gnome-scheduleを実行します。 cronタスクを追加するための強力なGUIを提供します。

この方法を使用する場合、デフォルトではタスクはルートとしてではなく、独自のユーザーとして実行されることに注意してください。これは通常良いことです。

52
Javier Rivera

KDEのタスクスケジューラ(kde-config-cronInstall kde-config-cron 。そこにあるTask SchedulerモジュールのSystem Settingsからアクセスします。

個人とシステムの両方のクロンタブを管理し、時間の境界を簡単に作成できることに非常に驚かされました(下のスクリーンショットを参照)。この部分は本当に過小評価されていると思います。

enter image description here

26
gertvdijk

KDEタスクスケジューラは、通常のUbuntuでは機能しません。 KUbuntuなどのKDEシステムでのみ機能します。非KDEシステムの場合は、gnome-scheduleを使用することをお勧めします

$ Sudo apt-get install gnome-schedule

このアプリは、ダッシュボードのスケジュールされたタスクです。

11
Antonio

Cronジョブをbashスクリプトで実行するように設定したかったため、スクリプトを実行すると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
10

シンボリックリンクを使用してUbuntu 18.04で毎分cronでスクリプトtest_cron.shを実行する例:

test_cron.shファイル:

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

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

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

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

Sudo nano /etc/cron.allow

root
myname

スクリプトへのパスは/home/myname/Shell/test_cron.shです

所有者を変更して実行可能にしました:

Sudo chown myname /home/myname/Shell/test_cron.sh
chmod +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/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
2
Alexander