crontabが良い選択だと聞きましたが、どのように行を書き、サーバーのどこに置くのですか?
crontabが良い選択だと聞きましたが、どのように行を書き、サーバーのどこに置くのですか?
回答:
crontabとは何か、Ubuntuでcrontabを使用する方法については、こちらのチュートリアルをご覧ください。crontabの行は次のようになります。
00 00 * * * ruby path/to/your/script.rb
(00 00
午前0時と0時間を示します。s *
は毎月の毎日を意味します。)
構文: mm hh dd mt wdコマンド mm分0-59 hh時間0-23 月のdd日1-31 mt月1-12 wd曜日0〜7(日曜日= 0または7) コマンド:実行するもの すべての数値は*で置き換えることができます。
/etc/crontab
(Ubuntuで)許可されていますが、実行crontab -e
するとユーザー固有のcrontabが編集され、この列は許可されません。IIRC Ubuntuは/etc/crontab
上書きされる可能性があるため、手動で終了することを推奨していません。ここを参照してください:stackoverflow.com/questions/8475694/...
sudo crotab -u root -e
マニュアルページから
linux$ man -S 5 crontab
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
...
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
...
使用できる特別な「ニックネーム」(manページに記載されている)、特に「@reboot」に注意してください。
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
このトリックを使用して、cronジョブを1分あたり複数回実行することもできます。
# Run every minute at 0, 20, and 40 second intervals
* * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
cronジョブを追加するには、次の3つのいずれかを行います。
上記のように(およびcrontabのセクション5のmanページから)、ユーザーのcrontabにコマンドを追加します。
crontab -e -u <username>
crontab -e
EDITOR
環境変数を使用してエディターを設定できます
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
スクリプト/プログラムをcronジョブとして作成し、システムのanacron /etc/cron.*ly
ディレクトリに追加します
chmod a+x /etc/cron.daily/script_runs_daily.sh
-実行可能にしますman anacron
chmod a+x <file>
/etc/crontab
か、/etc/anacrontab
設定した時刻に実行します/etc/anacrontab
、cron.hourlyで定義します/etc/cron.d/0hourly
または、システムcrontableをで作成できます/etc/cron.d
。
/etc/cron.d
れるファイルは、実行可能である必要はありません。someuser
使用/bin/bash
が強制されています。 File: /etc/cron.d/myapp-cron
# use /bin/bash to run commands, no matter what /etc/passwd says
SHELL=/bin/bash
# Execute a nightly (11:00pm) cron job to scrub application records
00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
場合によっては、rvmでcrontabを使用してPATHおよびGEM_PATHを指定する必要があります。
このような:
# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global
# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
cronジョブを設定するためのクイックガイド
新しいテキストファイルを作成します。例:mycronjobs.txt
毎日のジョブ(00:00、03:45)ごとに、スケジュール行をmycronjobs.txtに保存します
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
ジョブをcronに送信します(これを実行するたびに、cronは保存されているものを削除し、mycronjobs.txtの新しい情報で更新します)。
crontab mycronjobs.txt
追加の役立つ情報
現在のcronジョブを見る
crontab -l
すべてのcronジョブを削除する
crontab -r
シェルジョブは、cronジョブを使用するか、シェルスクリプトを作成するという2つの方法で実行できます。
スクリプト名が「yourscript.sh」であるとしましょう
まず、スクリプトのユーザー権限を確認します。以下のコマンドを使用して、スクリプトのユーザー権限を確認します
ll script.sh
スクリプトがルートにある場合は、以下のコマンドを使用します
sudo crontab -e
次に、スクリプトがユーザー「ubuntu」を保持している場合は、以下のコマンドを使用します
crontab -e
crontabに次の行を追加します。
55 23 * * * /path/to/yourscript.sh
これを行う別の方法は、スクリプトを記述して、それを背景で実行することです
毎日23:55に実行するスクリプト名(例:-youscript.sh)を入力する必要があるスクリプトを以下に示します。
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
ファイルに保存します(「every-day.sh」という名前を付けます)。
スリープ1d-1日待機してから、再度実行します。
今あなたのscript.use以下のコマンドに権限を与えます:-
chmod + x every-day.sh
ここで、「nohup」を使用して、このシェルスクリプトをバックグラウンドで実行します。これにより、セッションからログアウトした後もスクリプトが実行され続けます。
以下のコマンドを使用してスクリプトを実行します。
nohup ./every-day.sh&
注:-毎日23:55に「yourscript.sh」を実行するには、正確に23:55に「every-day.sh」スクリプトを実行する必要があります。