毎日午前0時にスクリプトを実行するcronを作成する方法は?


回答:


261

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)
  コマンド:実行するもの
  すべての数値は*で置き換えることができます。

1
「run-as-user」列をお見逃しなく。
Lucas Cimon、2015年

4
@LucasCimonユーザー列(コマンドの前にあります)は/etc/crontab(Ubuntuで)許可されていますが、実行crontab -eするとユーザー固有のcrontabが編集され、この列は許可されません。IIRC Ubuntuは/etc/crontab上書きされる可能性があるため、手動で終了することを推奨していません。ここを参照してください:stackoverflow.com/questions/8475694/...
ジョーダン走行

@Jordanなので、ルートのcrontabに対する答えはsudo crotab -u root -e
17:01:17の

40

マニュアルページから

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

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

    • rootとしてユーザーのcrontabを編集します crontab -e -u <username>
    • または、現在のユーザーの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. または、システムcrontableをで作成できます/etc/cron.d

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

5

場合によっては、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

4

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

03:45のcrontab構文が正しくありません。crontabフィールドは、分、時間、つまり "45 03"です-投稿に逆向きにあります。
Russell E Glaue 2014年

1

シェルジョブは、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」スクリプトを実行する必要があります。


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.