crontabタイミング起動スクリプト、自動構成
CRONTABコンセプト/紹介
crontabコマンドは、周期的に実行されるコマンドを設定するために使用されます.このコマンドは、標準入力デバイスからコマンドを読み出し、後で読み取りおよび実行するために「crontab」ファイルに保存します.
cronシステムスケジューリングプロセス.毎日の非ピーク負荷期間でジョブを実行したり、1週間または1月の異なる期間で実行したりすることができます.cronはシステムの主要なスケジューリングプロセスであり、人工的な介入を必要とせずにジョブを実行することができる.crontabコマンドを使用すると、ユーザーは対応するジョブをコミット、編集、または削除できます.各ユーザは、スケジューリング情報を保存するためにcrontabファイルを持つことができる.システム管理者はcron.denyとcronallowこの2つのファイルは、ユーザーが自分のcrontabファイルを持つことを禁止または許可するために使用されます.
1:crontabファイルは一般的に/etc/の下にあり、システムが実行するスケジューラが格納されます.
[root@localhost cron]# more/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts/etc/cron.hourly
02 4 * * * root run-parts/etc/cron.daily
22 4 * * 0 root run-parts/etc/cron.weekly
42 4 1 * * root run-parts/etc/cron.monthly
2:各ユーザーは自動的に独自のcrontabファイルを生成します.一般的に/var/spool/cronディレクトリの下にあります.
[root@localhost cron]# cd/var/spool/cron
[root@localhost cron]# ls
oracle root
コマンドcrontab-rを使用すると、oracleアカウントに切り替えてコマンドを実行するなど、現在のユーザーのcrontabファイルが削除されます./var/spool/cron/oracleファイルは削除されます.このファイルを作成するにはcrontab-eコマンドだけでいいです.通常のユーザーにはアクセス権がありません/var/spool/cron
3:cron.denyとcron.allowファイル
/etc/cron.denyはcrontabコマンドを使用できないユーザーを示します
/etc/cron.allowはcrontabを使用できるユーザーを表します.
デフォルトではcron.allowファイルは存在しません.2つのファイルが同時に存在する場合、/etc/cron.allow優先.両方のファイルが存在しない場合は、ジョブをスケジュールできるのはスーパーユーザーのみです.
でも不思議なのはcronです.denyファイルは空です.以下に示します.
[oracle@localhost etc]$ more cron.deny
4:cron.hourly,cron.daily,cron.monthly,cron.weekly
[oracle@localhost etc]$ ls -lrt cron*
-rw-r--r-- 1 root root 255 Sep 21 2004 crontab
-rw-r--r-- 1 root root 0 May 16 2008 cron.deny
cron.hourly:
total 0
cron.monthly:
total 8
-rwxr-xr-x 1 root root 278 Sep 29 2004 0anacron
cron.weekly:
total 16
-rwxr-xr-x 1 root root 277 Sep 29 2004 0anacron
-rwxr-xr-x 1 root root 414 Jun 6 2007 00-makewhatis.cron
cron.daily:
total 60
-rwxr-xr-x 1 root root 286 Aug 14 2004 tmpwatch
-rwxr-xr-x 1 root root 276 Sep 29 2004 0anacron
-rwxr-xr-x 1 root root 2133 Dec 1 2004 prelink
-rwxr-xr-x 1 root root 180 May 2 2006 logrotate
-rwxr-xr-x 1 root root 418 Jun 6 2007 00-makewhatis.cron
-rwxr-xr-x 1 root root 104 Aug 2 2007 rpm
-rwxr-xr-x 1 root root 121 Aug 22 2007 slocate.cron
lrwxrwxrwx 1 root root 28 May 16 2008 00-logwatch -> ../log.d/scripts/logwatch.pl
cron.d:
total 12
-rw------- 1 root root 366 Jun 12 2007 sa-update
-rw-r--r-- 1 root root 188 Jul 18 2007 sysstat
CRONTABオンラインマニュアル
注意:異なるバージョンのLinuxシステムでは、crontabマニュアルの内容が異なる場合があります.実際のバージョンを基準にしてください.
[oracle@localhost ~]$ man crontab | more
CRONTAB文法及び応用
1:現在のユーザーのタイミングタスクの表示
[oracle@localhost ~]$ crontab -l
* * * * */home/oracle/test.sh >/dev/null 2>&1
2:現在のユーザーのタイミングタスクの編集
編集ステータスで、いくつかのタイミングタスクを変更、削除、追加できます.注釈一般用#
[oracle@localhost ~]$ crontab -e
3:現在のユーザーのタイミングタスクの削除
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
4:
次のように、一般的なcrontabファイルのタイミングタスクフォーマットは次のようになります.
59 23 * * */home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1
crontabファイルの各エントリの各ドメインの意味とフォーマット:
1列目の分:1-59
2列目の時間:1-23(0は子夜を表す)
第3列日:1-31
第四列月:1——12
第五列曜日:0-6(0は日曜日、1は月曜日、このように押す)
6列目に実行するコマンド
この6列をC 1、C 2、C 3、C 4、C 5、C 6で表し、前の5列はスクリプトを実行する頻度を組み合わせて決定し、最小頻度は毎分1回で、Cnは*/n ; T1-T2; a,b,c; 4つの形式で表します.
C 1が*の場合は毎分スクリプトが実行され、C 2が*の場合は毎時プログラムが実行されることを示し、順次類推する.....
C 1がT 1-T 2の場合はT 1分目からT 2分目までの間に実行することを示す、C 2がT 1-T 2の場合はT 1からT 2時間目までの間に実行することを示す、順次類推する.
C 1が*/nの場合はn分毎の時間間隔で1回、C 2が*/nの場合はn時間毎の間隔で1回、順次類推する.....
C 1がa,b,c,...でa,b,c,...分実行、C 2はa、b、c、...時はa,b,c...時間ごとに実行し、順番に類推する....
参考までにいくつか例を挙げてみましょう
1: 59 23 * * */home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1
スクリプト/home/oracle/scripts/alert_を毎日23時59分に実行することを示します.log_archive.sh
2: */5 * * * */home/oracle/scripts/monitoring_alert_log.sh >/dev/null 2>&1
スクリプト/home/oracle/scripts/monitoring_を5分ごとに実行することを示します.alert_log.sh
3: 0 20 * * 1-5 mail -s "**********"[email protected] 月曜日から金曜日まで毎日午後20:00に手紙を送ります[email protected]
..............................................
>/dev/null 2>&1の説明について:
0はキーボード入力
1は標準出力
2はエラー出力を示す.
まずtestを作成します.shスクリプトは次のとおりです.
#!/bin/sh
echo "hello, everybody, now is "`date`
date >> test.txt
ジョブを追加
* * * * */home/oracle/test.sh >/home/oracle/log.txt&デフォルトは1です.つまり、次のコマンドと一致します.
* * * * */home/oracle/test.sh 1>/home/oracle/log.txt &
* * * * */home/oracle/test.sh 2>/home/oracle/log.txt &
* * * * */home/oracle/test.sh 2>/home/oracle/log.txt 2>&1 &
1,2はtesh.shコマンド出力をlogにリダイレクトする.txt、すなわち、出力内容は画面に印刷する、logに出力する.txtファイルにあります.上書きではなく追加が必要な場合は、>>で代用できます.
2>&1は、エラー出力を標準出力にリダイレクトします.次に、標準入力をファイルlogにリダイレクトする.txt.
&1はファイル記述1を表し、標準出力を表し、ここで少なくなると&数字1になり、ファイル1にリダイレクトすることを表す.
注意事項:
タイミングタスクを構成する際には、次の2つの問題に注意する必要があります.
1:SHELLに必要な環境変数を設定した.たとえばshellスクリプトは手動でOKを実行するが、バックグラウンドジョブの実行時にORACLEの環境変数が取得されないように構成されている.これは、crontab環境変数の問題のためであり、Crontabの環境はデフォルトではシステム内の現在のユーザの環境を含まない.shellスクリプトに必要な環境変数の設定を追加する必要があります
2:できるだけすべてのファイルが完全なパス方式を採用し、相対的なパスを使用しないようにします.
参考資料:
http://blog.csdn.net/tianlesoftware/article/details/5315039
http://yke2000.blog.163.com/blog/static/319238142010147308843/
作者:潇湘隠者
出典:http://www.cnblogs.com/kerrycode/
crontabコマンドは、周期的に実行されるコマンドを設定するために使用されます.このコマンドは、標準入力デバイスからコマンドを読み出し、後で読み取りおよび実行するために「crontab」ファイルに保存します.
cronシステムスケジューリングプロセス.毎日の非ピーク負荷期間でジョブを実行したり、1週間または1月の異なる期間で実行したりすることができます.cronはシステムの主要なスケジューリングプロセスであり、人工的な介入を必要とせずにジョブを実行することができる.crontabコマンドを使用すると、ユーザーは対応するジョブをコミット、編集、または削除できます.各ユーザは、スケジューリング情報を保存するためにcrontabファイルを持つことができる.システム管理者はcron.denyとcronallowこの2つのファイルは、ユーザーが自分のcrontabファイルを持つことを禁止または許可するために使用されます.
1:crontabファイルは一般的に/etc/の下にあり、システムが実行するスケジューラが格納されます.
[root@localhost cron]# more/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts/etc/cron.hourly
02 4 * * * root run-parts/etc/cron.daily
22 4 * * 0 root run-parts/etc/cron.weekly
42 4 1 * * root run-parts/etc/cron.monthly
2:各ユーザーは自動的に独自のcrontabファイルを生成します.一般的に/var/spool/cronディレクトリの下にあります.
[root@localhost cron]# cd/var/spool/cron
[root@localhost cron]# ls
oracle root
コマンドcrontab-rを使用すると、oracleアカウントに切り替えてコマンドを実行するなど、現在のユーザーのcrontabファイルが削除されます./var/spool/cron/oracleファイルは削除されます.このファイルを作成するにはcrontab-eコマンドだけでいいです.通常のユーザーにはアクセス権がありません/var/spool/cron
3:cron.denyとcron.allowファイル
/etc/cron.denyはcrontabコマンドを使用できないユーザーを示します
/etc/cron.allowはcrontabを使用できるユーザーを表します.
デフォルトではcron.allowファイルは存在しません.2つのファイルが同時に存在する場合、/etc/cron.allow優先.両方のファイルが存在しない場合は、ジョブをスケジュールできるのはスーパーユーザーのみです.
でも不思議なのはcronです.denyファイルは空です.以下に示します.
[oracle@localhost etc]$ more cron.deny
4:cron.hourly,cron.daily,cron.monthly,cron.weekly
[oracle@localhost etc]$ ls -lrt cron*
-rw-r--r-- 1 root root 255 Sep 21 2004 crontab
-rw-r--r-- 1 root root 0 May 16 2008 cron.deny
cron.hourly:
total 0
cron.monthly:
total 8
-rwxr-xr-x 1 root root 278 Sep 29 2004 0anacron
cron.weekly:
total 16
-rwxr-xr-x 1 root root 277 Sep 29 2004 0anacron
-rwxr-xr-x 1 root root 414 Jun 6 2007 00-makewhatis.cron
cron.daily:
total 60
-rwxr-xr-x 1 root root 286 Aug 14 2004 tmpwatch
-rwxr-xr-x 1 root root 276 Sep 29 2004 0anacron
-rwxr-xr-x 1 root root 2133 Dec 1 2004 prelink
-rwxr-xr-x 1 root root 180 May 2 2006 logrotate
-rwxr-xr-x 1 root root 418 Jun 6 2007 00-makewhatis.cron
-rwxr-xr-x 1 root root 104 Aug 2 2007 rpm
-rwxr-xr-x 1 root root 121 Aug 22 2007 slocate.cron
lrwxrwxrwx 1 root root 28 May 16 2008 00-logwatch -> ../log.d/scripts/logwatch.pl
cron.d:
total 12
-rw------- 1 root root 366 Jun 12 2007 sa-update
-rw-r--r-- 1 root root 188 Jul 18 2007 sysstat
CRONTABオンラインマニュアル
注意:異なるバージョンのLinuxシステムでは、crontabマニュアルの内容が異なる場合があります.実際のバージョンを基準にしてください.
[oracle@localhost ~]$ man crontab | more
CRONTAB(1) CRONTAB(1)
NAME
crontab - maintain crontab files for individual users (ISC Cron V4.1)
SYNOPSIS
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
DESCRIPTION
Crontab is the program used to install, deinstall or list the tables
used to drive the cron(8) daemon in ISC Cron. Each user can have their
own crontab, and though these are files in /var/spool/ , they are not
intended to be edited directly. For SELinux in mls mode can be even
more crontabs - for each range. For more see selinux(8).
If the cron.allow file exists, then you must be listed therein in order
to be allowed to use this command. If the cron.allow file does not
exist but the cron.deny file does exist, then you must not be listed in
the cron.deny file in order to use this command. If neither of these
files exists, only the super user will be allowed to use this command.
OPTIONS
-u It specifies the name of the user whose crontab is to be
tweaked. If this option is not given, crontab examines "your"
crontab, i.e., the crontab of the person executing the command.
Note that su(8) can confuse crontab and that if you are running
inside of su(8) you should always use the -u option for safety’s
sake. The first form of this command is used to install a new
crontab from some named file or standard input if the pseudo-
filename "-" is given.
-l The current crontab will be displayed on standard output.
-r The current crontab will be removed.
-e This option is used to edit the current crontab using the editor
specified by the VISUAL or EDITOR environment variables. After
you exit from the editor, the modified crontab will be installed
automatically.
-i This option modifies the -r option to prompt the user for a
’y/Y’ response before actually removing the crontab.
-s It will append the current SELinux security context string as an
MLS_LEVEL setting to the crontab file before editing / replace-
ment occurs - see the documentation of MLS_LEVEL in crontab(5).
SEE ALSO
crontab(5), cron(8)
FILES
/etc/cron.allow
/etc/cron.deny
STANDARDS
The crontab command conforms to IEEE Std1003.2-1992 (‘‘POSIX’’). This
new command syntax differs from previous versions of Vixie Cron, as
well as from the classic SVR3 syntax.
DIAGNOSTICS
A fairly informative usage message appears if you run it with a bad
command line.
AUTHOR
Paul Vixie 4th Berkeley Distribution 16 Januar 2007 CRONTAB(1)
CRONTAB文法及び応用
1:現在のユーザーのタイミングタスクの表示
[oracle@localhost ~]$ crontab -l
* * * * */home/oracle/test.sh >/dev/null 2>&1
2:現在のユーザーのタイミングタスクの編集
編集ステータスで、いくつかのタイミングタスクを変更、削除、追加できます.注釈一般用#
[oracle@localhost ~]$ crontab -e
3:現在のユーザーのタイミングタスクの削除
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
4:
次のように、一般的なcrontabファイルのタイミングタスクフォーマットは次のようになります.
59 23 * * */home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1
crontabファイルの各エントリの各ドメインの意味とフォーマット:
1列目の分:1-59
2列目の時間:1-23(0は子夜を表す)
第3列日:1-31
第四列月:1——12
第五列曜日:0-6(0は日曜日、1は月曜日、このように押す)
6列目に実行するコマンド
この6列をC 1、C 2、C 3、C 4、C 5、C 6で表し、前の5列はスクリプトを実行する頻度を組み合わせて決定し、最小頻度は毎分1回で、Cnは*/n ; T1-T2; a,b,c; 4つの形式で表します.
C 1が*の場合は毎分スクリプトが実行され、C 2が*の場合は毎時プログラムが実行されることを示し、順次類推する.....
C 1がT 1-T 2の場合はT 1分目からT 2分目までの間に実行することを示す、C 2がT 1-T 2の場合はT 1からT 2時間目までの間に実行することを示す、順次類推する.
C 1が*/nの場合はn分毎の時間間隔で1回、C 2が*/nの場合はn時間毎の間隔で1回、順次類推する.....
C 1がa,b,c,...でa,b,c,...分実行、C 2はa、b、c、...時はa,b,c...時間ごとに実行し、順番に類推する....
参考までにいくつか例を挙げてみましょう
1: 59 23 * * */home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1
スクリプト/home/oracle/scripts/alert_を毎日23時59分に実行することを示します.log_archive.sh
2: */5 * * * */home/oracle/scripts/monitoring_alert_log.sh >/dev/null 2>&1
スクリプト/home/oracle/scripts/monitoring_を5分ごとに実行することを示します.alert_log.sh
3: 0 20 * * 1-5 mail -s "**********"[email protected] 月曜日から金曜日まで毎日午後20:00に手紙を送ります[email protected]
..............................................
>/dev/null 2>&1の説明について:
0はキーボード入力
1は標準出力
2はエラー出力を示す.
まずtestを作成します.shスクリプトは次のとおりです.
#!/bin/sh
echo "hello, everybody, now is "`date`
date >> test.txt
ジョブを追加
* * * * */home/oracle/test.sh >/home/oracle/log.txt&デフォルトは1です.つまり、次のコマンドと一致します.
* * * * */home/oracle/test.sh 1>/home/oracle/log.txt &
* * * * */home/oracle/test.sh 2>/home/oracle/log.txt &
* * * * */home/oracle/test.sh 2>/home/oracle/log.txt 2>&1 &
1,2はtesh.shコマンド出力をlogにリダイレクトする.txt、すなわち、出力内容は画面に印刷する、logに出力する.txtファイルにあります.上書きではなく追加が必要な場合は、>>で代用できます.
2>&1は、エラー出力を標準出力にリダイレクトします.次に、標準入力をファイルlogにリダイレクトする.txt.
&1はファイル記述1を表し、標準出力を表し、ここで少なくなると&数字1になり、ファイル1にリダイレクトすることを表す.
注意事項:
タイミングタスクを構成する際には、次の2つの問題に注意する必要があります.
1:SHELLに必要な環境変数を設定した.たとえばshellスクリプトは手動でOKを実行するが、バックグラウンドジョブの実行時にORACLEの環境変数が取得されないように構成されている.これは、crontab環境変数の問題のためであり、Crontabの環境はデフォルトではシステム内の現在のユーザの環境を含まない.shellスクリプトに必要な環境変数の設定を追加する必要があります
2:できるだけすべてのファイルが完全なパス方式を採用し、相対的なパスを使用しないようにします.
参考資料:
http://blog.csdn.net/tianlesoftware/article/details/5315039
http://yke2000.blog.163.com/blog/static/319238142010147308843/
作者:潇湘隠者
出典:http://www.cnblogs.com/kerrycode/