タスクを定期的に実行するようにスケジュールしたいのですが、Cronがこれを実行する方法だと聞きました。
UbuntuでCronジョブを追加するにはどうすればよいですか?
/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は日曜日です。
もっと読むことができます こちら 。
実行したいジョブがユーザーと同じ権限で実行できる場合、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
で確認できます。
GUIを使用して行う場合は、ソフトウェアセンターにアクセスして、スケジュールされたタスクをインストールするか、Sudo apt-get install gnome-schedule
を実行します。 cronタスクを追加するための強力なGUIを提供します。
この方法を使用する場合、デフォルトではタスクはルートとしてではなく、独自のユーザーとして実行されることに注意してください。これは通常良いことです。
KDEのタスクスケジューラ(kde-config-cron
) 。そこにあるTask SchedulerモジュールのSystem Settingsからアクセスします。
個人とシステムの両方のクロンタブを管理し、時間の境界を簡単に作成できることに非常に驚かされました(下のスクリーンショットを参照)。この部分は本当に過小評価されていると思います。
KDEタスクスケジューラは、通常のUbuntuでは機能しません。 KUbuntuなどのKDEシステムでのみ機能します。非KDEシステムの場合は、gnome-scheduleを使用することをお勧めします
$ Sudo apt-get install gnome-schedule
このアプリは、ダッシュボードのスケジュールされたタスクです。
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
シンボリックリンクを使用して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)