logo
- A Graphical Scheduler for KDE3
- A Graphical Scheduler for KDE3
- A Graphical Scheduler for KDE3
kroneko


SourceForge Service

SourceForge.jp

Links

日本KDEユーザ会
KDevelop
KDE本家
APPS.KDE

日本語 English

Cron

各ディストリビューションでは、それぞれ、自分のシステム用に vixie-cron のカスタマイズを行なっている。


ソースに付属する説明書(INSTALL)より


Makefile の先頭にあるコメントを読んで下さい。そして、'configurable stuff' と印がある個所を編集して下さい。

次に、config.h を編集します。変更箇所はファイルの先頭から少し下にあるはずです。それには明確な印はしてません。 pathnames.h も見て下さい。

/var/cron か /var/cron/tabs のディレクトリを作成する必要はありません。
もし存在しなければ、デーモンと 'crontab' プログラムが初回の起動時に、作成します。 しかし、 /var は絶対に必要です。 もしなければ、"mkdir /var" で作成してください。
/var に多くのファイルが存在することが予想されるなら、"mkdir /usr/var; ln -s /usr/var /var" とすることも可能です。

もし、Makefile を変更しないのであれば、 /usr/local/etc と /usr/local/bin のディレクトリも必要になります。それらは手作業で作成する必要があります。

LINUX での注意点: ある Linux システムでは /usr/include/paths.h にsendmail が /usr/lib にインストールされているにもかかわらず、_PATH_SENDMAIL が /usr/bin/senmail をさしています。
チェックする必要があります。

ソースに付属する説明書(README)より


このプログラムを使用するに当たって:申し訳ありませんが、カワイイ(私はイカツイと思う) 'Configure'スクリプトがありません。
2、3のファイルを編集する必要があります。ここにチェックリストをあげます。
  • FEATURE, INSTALL そして CONVERSION をすべて読んで下さい。
  • config.h を編集します。
  • Makefile を編集します。
    (上の2つのファイルに指示が書いてあります。config.h のある部分は、Makefile で定義でき、#ifndef...#endif で囲んであることに注意して下さい。)
  • 'make'
  • 'su' and 'make install'
    (man ページは手作業でインストールする必要があるかもしれません)


vixie-cron のデフォルトと redhat8.0 の変更点。

シンボルファイルデフォルトredhatコメント
DESTBINMakefile/usr/bin同じcrontab のインストールディレクトリ
DESTSBINMakefile/usr/sbin同じcrond のインストールディレクトリ
DESTMANMakefile/usr/share/man同じman のインストールディレクトリ
_PATH_SENDMAILconfig.h/usr/lib/sendmail同じsendmail
/usr/include/paths.hで定義
ALLOW_ONLY_ROOTconfig.h定義しない定義しない許可/拒否ファイルがどちらも存在しない場合、定義されていると、root しか crontab を使用できない 。定義されていないと、全ユーザが使用できる。
CRONDIRpahtnames.h/var/cron/etcスプール・許可/拒否ファイル・ログファイル
crond, crontab の実行ディレクトリ
SPOOL_DIRpathnames.htabs/var/spool/cronスプールファイルディレクトリ
ALLOW_FILEpthnames.hallowcron.allow許可ファイル
DENY_FILEpathnames.hdenycron.deny拒否ファイル
LOG_FILEpathnames.hlog定義しないログファイル
定義がないと出力されない。
システムログは syslog.h で定義された LOG_CRON か LOG_DAEMON に出力される。
SYSCRONTABpathnames.h/etc/crontab同じシステム crontab ファイル
EDITORpathnames.h/usr/ucb/vi/bin/vi使用するエディタ
/usr/include/paths の _PATH_VI
_PATH_BSHELLpathnames.h/bin/sh同じ起動するシェル
/usr/include/paths がデフォルト
_PATH_DEFPATHpathnames.h/usr/bin:/bin同じ環境変数 PATH にデフォルト設定される
/usr/include/paths がデフォルト


crontab 実行のエラー

crontab コマンドの 実行のリターンステイタスは 正常:0 エラー:1 になる。
しかし、登録("crontab -r")エラーで 0 を返す場合があるので注意が必要。
その場合、stderr にはエラー内容が出力される。


例:

0-60 * * * * echo "Error Test"


crontab -l で出力される先頭のコメントについて

crontab -l で以下の3行のコメントが出力され、その後に現在の設定内容が出力される。


# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/kde-root/kroneko3J1vka.tmp installed on Wed Mar 26 12:54:05 2003)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)

kroneko ではコメントラインを削除して設定を取りこんでいます。

DEBIAN ではコメントラインを出力しない様にカスタマイズされているようです。
現在、Debian には対応していません。対応するつもり。


タスクの実行処理について

  • タスクの登録時、以下の環境変数を初期化している。 (crontab で上書きする。)
    SHELL : デフォルト=定義(_PATH_BSHELL)
    PATH : デフォルト=定義(_PATH_DEFPATH)
    HOME : デフォルト=登録ユーザのpasswdよりホームディレクトリ
    LOGNAME : デフォルト=登録ユーザのpasswdよりユーザ名
    USER : デフォルト=登録ユーザのpasswdよりユーザ名
  • fork()
  • "HOME" に chdir();
  • グループIDを変更 chgid();
  • ユーザIDを変更 chuid();
  • execle( SHELL, SHELL, "-c", タスクコマンド, 0, crontab の環境変数 )

anacron

おそらくredhat8.0 のシステムでは、ソースからほぼ変更なしに コンパイルーインストールしているものと思う。


ソースに付属する説明書(README)より


  • Makefile をチェックしてください。 必要があれば編集してください。
  • "global.h" の先頭をチェックしてください。syslog 機能 と プライオリティ−、また、MTAの sendmail と互換性のあるコマンドのパス(/usr/lib/sendmail) を変更したいかもしれません。
  • 'make'とタイプします。
    "*.d: No such file or directory" というワーニングは安全に無視できます。
  • root になり、'make install' とタイプします。


anacron のデフォルト設定

シンボルファイルデフォルトコメント
BINDIRMakefile/usr/sbinanacron インストールディレクトリ
SPOOLDIRMakefile/var/spool/anacronスプールディレクトリ
ANACRONTABMakefile/etc/anacrontabanacrontab ファイル
SYSLOG_FACILITYglobal.hLOG_CRONクロックデーモン
sys/syslog.h に定義
EXPLAIN_LEVELglobal.hLOG_NOTICEプライオリティ−名:情報メッセージ
sys/syslog.h に定義
COMPLAIN_DEVELglobal.hLOG_ERRプライオリティ−名: エラーメッセージ
sys/syslog.h に定義
DEBUG_DEVELglobal.hLOG_DEBUGプライオリティ−名: デバッグ時のみ有効
sys/syslog.h に定義
SENDMAILglobal.h/usr/sbin/sendmailsendmail
FAILURE_EXITglobal.h1エラー終了時の exit コード


バージョン

anacron -V での出力は stdout になる。


タスクID が重複していたら、どうなるか

エラーにはならない。しかし、管理者がそのチェックをするべきである。


1 1 DUP_TEST echo "TEST 1"
2 2 DUP_TEST echo "TEST 2"

上記の場合、初回のみ、両方のタスクが実行される。
しかし、翌日のからは "2 2 DUP_TEST .." は実行されない。


素朴な疑問:ユーザ定義の crontab を作成できる。anacron ではできないのか。

anacron の仕様上は想定していないようである。
しかし、以下の様にすれば可能。

  1. スプールディレクトリ(/var/spool/anacron) のパーミッションを変更する。
  2. ユーザの anacrontab ファイル( たとえば my_anacrontab ) を作成する。
  3. 以下のコマンドを実行する。または、ユーザの crontab に入れる。
    anacron -s -t /home/nanigashi/my_anacrontab

! タスクIDの重複の問題が発生しうるので、管理者は確実に迷惑する。


タスクの実行処理について

  • fork()
  • 環境変数をセット setenv()
  • chdir( "/" );
  • execl( "/bin/sh", "/bin/sh", "-c", タスクコマンド, 0 )

at

at は Configuration を使用する。
以下の configure のオプションを指定することで、カスタマイズをおこなう。

at の configure のオプション(一部)

オプションデフォルトコメント
--with-etcdir/etc許可・拒否ファイルのディレクトリ
--with-jobdir/var/spool/atjobsジョブを保持するディレクトリ
--with-atspool/var/spool/atspoolスプールを保持するディレクトリ

configure の結果出力される config.h

シンボルデフォルトrethat8.0コメント
SPOOLDIR/var/spool/cron同じスプールディレクトリ
ATJOB_DIR/var/spool/cron/atjobs/var/spool/atジョブスプールディレクトリ
ATSPOOL_DIR/var/spool/cron/atspool/var/spool/at/spool実行スプールディレクトリ
PIDFILE/var/run/atd.pid同じロックファイル


TIME 指定について

at では POSIX.2 標準を拡張した、複雑な TIME 指定ができる。
使いこなせば、非常に便利なものと思うが、ハックするにも、bison, lex の知識が必要になる。
kroneko では対応できていない。


ログ出力について

at では、エラー・ワーニング・注意メッセージだけをロギングしている。 at, anacron のように起動・ジョブ操作・ジョブ実行のロギングは行なっていない。
そのため、過去に実行されたジョブを調べることができないので、セキュリティ−上、不安な気がする。
しかし、それはそれで、使い勝手がよいことがあるのかもしれない。


バージョン

at -V での出力は stderr になる。


タスクの実行処理ノート

  • fork()
  • 標準入力をジョブファイル、標準出力をメイル出力ファイルに設定する。
  • chdir( ATJOB_DIR );
  • setgid();
  • setuid();
  • chdir( / );
  • execle( "/bin/sh", "sh", (char *)NULL, 空の環境変数ポインター )