タスクを定期的に実行するようにスケジュールしたいのですが、Cronがこれを行う方法だと聞いています。
UbuntuでCronジョブを追加するにはどうすればよいですか?
タスクを定期的に実行するようにスケジュールしたいのですが、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は日曜日です。
*/15 * * * * /path/to/command
、@reboot /path/to/command
起動時に何かを実行するためにできることです。
実行したいジョブがユーザーと同じ権限で実行できる場合、実行EDITOR="gedit" crontab -e
(geditを使用してcrontabファイルを編集)するか、単にcrontab -e
(デフォルトのエディターを使用)編集できるユーザーcrontabを使用することをお勧めします。ターミナルで。
たとえば、10分ごとに何かを実行したい場合は、次のような行を追加します
*/10 * * * * /usr/bin/somedirectory/somecommand
ファイルを保存します。
ユーザーcrontabの内容はで確認できますcrontab -l
。
ルートとして実行するcronジョブを追加するには、を実行してルートのcrontabを編集できますsudo crontab -e
。
最も柔軟な方法は/etc/crontab
、root権限でのみ編集できるシステム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
) をお勧めします。そこにあるタスクスケジューラモジュールのシステム設定からアクセスします。
個人とシステムの両方のクロンタブを管理し、時間の境界を簡単に作成できることに非常に驚かされました(下のスクリーンショットを参照)。この部分は本当に過小評価されていると思います。
KDEタスクスケジューラは、通常のUbuntuでは機能しません。KUbuntuなどのKDEシステムでのみ機能します。非KDEシステムの場合、gnome-scheduleを使用することをお勧めします
$ sudo apt-get install gnome-schedule
このアプリは、ダッシュボードのスケジュールされたタスクです。
I can't install gnome schedule on Ubuntu 16.04
@ askubuntu.com/questions/785657/...を。@ bugs.launchpad.net / ubuntu / +source / gnome-schedule / +bug / 1576060 / …をダウンロードするパッケージがあります。ちょうど実行$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
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
test_cron.sh
Ubuntu 18.04でシンボリックリンクを使用して毎分cronでスクリプトを実行する例:
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)