crontabで複数のcronジョブを有効にできるかどうかを知りたいのですが、1分ごとに1つのジョブのみが開始されます。ここでの問題は、この1つを除く他のすべてのジョブ情報のログを維持したいということです。
Oct 25 14:50:01 dtest CRON[942]: (root) CMD (/usr/bin/python2.7 check.py > /dev/null 2>&1)
現在、これらすべての行が多すぎて、cronが選択したプロセスのログエントリを抑制できるかどうか疑問に思います。
答え1
cronieを使用するディストリビューション(CentOS、RHEL、openSUSE、Fedora、Gentoo、Archなど)では、crontabの最初の列に特別な「-」エントリを使用できます。
Vixie cronを使用するDebianを使用しているので、これはあなたの場合には役に立ちません。
CentOSでの使用例は次のとおりです。仕組みを見るtouch /tmp/foo2
した19:37に走り始めたが/var/log/cron
。
# crontab -l
* * * * * touch /tmp/foo1
-* * * * * touch /tmp/foo2
# ls -l /tmp/foo*
-rw-r--r--. 1 root root 0 Oct 25 19:37 /tmp/foo1
-rw-r--r--. 1 root root 0 Oct 25 19:37 /tmp/foo2
# grep foo /var/log/cron
Oct 25 19:37:01 instance-2 CROND[12639]: (root) CMD (touch /tmp/foo1)
#
これが完全に文書化されているかどうかはわかりませんが、この動作を設定するコードは次のようになります。クロニーソースコード
/* check for '-' as a first character, this option will disable
* writing a syslog message about command getting executed
*/
if (ch == '-') {
/* if we are editing system crontab or user uid is 0 (root)
* we are allowed to disable logging
*/
if (pw == NULL || pw->pw_uid == 0)
e->flags |= DONT_LOG;
else {
log_it("CRON", getpid(), "ERROR", "Only privileged user can disable logging", 0);
ecode = e_option;
goto eof;
}
ch = get_char(file);
if (ch == EOF) {
free(e);
return NULL;
}
}
それではどちらを引用するのかCronie ソースコードの他の場所
if ((e->flags & DONT_LOG) == 0) {
char *x = mkprints((u_char *) e->cmd, strlen(e->cmd));
log_it(usernm, getpid(), "CMD", x, 0);
free(x);
}