web-dev-qa-db-ja.com

毎日真夜中にスクリプトを実行するcronを作成する方法は?

Crontabが良い選択だと聞いたことがありますが、どのように行を書き、サーバーのどこに置くのですか?

129
Matt Elhotiby

これは良いチュートリアルです 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)
コマンド:実行するもの
すべての数値を*に置き換えることができます。これは、all 
を意味します。
245
Jordan Running

マニュアルページから

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
   ...

使用できる特別な「ニックネーム」(マニュアルページに記載)、特に日時の代替がない「@reboot」に注意してください。

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

このトリックを使用して、cronジョブを毎分複数回実行することもできます。

   # 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つのいずれかを実行できます。

  1. 上記のように(およびcrontabのセクション5、manページから)、ユーザーのcrontabにコマンドを追加します。

    • crontab -e -u <username>を使用して、rootとしてユーザーのcrontabを編集します
    • または、現在のユーザーのcrontabをcrontab -eだけで編集します
    • 環境変数EDITORを使用してエディターを設定できます
      • env EDITOR=nano crontab -e -u <username>
      • または、シェルセッション全体のEDITORの値を設定します
        1. export EDITOR=vim
        2. crontab -e
    • chmod a+x <file>でスクリプトを実行可能にする


  1. cronジョブとしてスクリプト/プログラムを作成し、システムのanacron /etc/cron.*lyディレクトリに追加

    • anacron /etc/cron.*lyディレクトリ:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • 次のように:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh-実行可能にする
    • Anacronのmanページも参照してください:man anacron
    • chmod a+x <file>でスクリプトを実行可能にする
    • これらのcron。* lyスクリプトはいつ実行されますか?
      • RHEL/CentOS 5.xの場合、/etc/crontabまたは/etc/anacrontabで設定された時間に実行されるように構成されます
      • RHEL/CentOS 6.x +およびFedora 17+ Linuxシステムは、これを/etc/anacrontabでのみ定義し、cron.hourlyを/etc/cron.d/0hourlyで定義します


  1. または、/etc/cron.dでシステムcrontableを作成できます。

    • 前述のcrontab構文(各ジョブを実行するユーザーを追加で提供)はファイルに入れられ、ファイルは/etc/cron.dディレクトリにドロップされます。
    • これらはシステムパッケージ(RPMパッケージなど)で管理しやすいので、通常はアプリケーション固有です。
    • 構文の違いは、時刻/日付フィールドの後、実行するコマンドの前に、cronジョブに対してユーザーを指定する必要があることです。
    • /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
39
Russell E Glaue

場合によっては、crontabとrvmを使用して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
5
LV2014

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
4
dyltini

Cronジョブを使用するか、シェルスクリプトを作成するかの2つの方法でシェルスクリプトを実行できます

スクリプト名が「yourscript.sh」であると仮定しましょう

最初に、スクリプトのユーザー権限を確認します。以下のコマンドを使用して、スクリプトのユーザー権限を確認します

ll script.sh

スクリプトがルートにある場合、以下のコマンドを使用します

Sudo crontab -e

次に、スクリプトがユーザー「ubuntu」を保持している場合、以下のコマンドを使用します

crontab -e

Crontabに次の行を追加します。

55 23 * * * /path/to/yourscript.sh

これを行う別の方法は、スクリプトを記述し、バックグラウンドで実行することです

これは、毎日23:55 pmに実行するスクリプト名(例:-youscript.sh)を入力する必要があるスクリプトです。

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

ファイルに保存します(「every-day.sh」という名前を付けます)

sleep 1d-1日待ってから再び実行することを意味します。

今、あなたのscript.use以下のコマンドに許可を与えます:

chmod + x every-day.sh

ここで、「Nohup」を使用してバックグラウンドでこのシェルスクリプトを実行します。これにより、セッションからログアウトした後でもスクリプトが実行され続けます。

以下のコマンドを使用してスクリプトを実行します。

Nohup ./every-day.sh&

注:-毎日23:55に「yourscript.sh」を実行するには、正確に23:55に「every-day.sh」スクリプトを実行する必要があります。

1
Modassir Haider

この文をcrontabファイルに入れます:0 0 * * */usr/local/bin/python /opt/ByAccount.py> /var/log/cron.log 2>&1

0
MAES