第1四半期

第1四半期

ファイルを作成してクローンジョブを設定しようとしています/etc/cron.d/myjob

55 * * * * t echo hello > /tmp/cron.log  && cd /tmp/test/ && pwd > /tmp/cron.log

タスクが正常にスケジュールされたことを確認するためにリダイレクトを試しました。 21:50にファイルを作成しましたが、5分後の21:55に/tmp/cron.logはまだ作成されていません。理由を知りたいです。

私はユーザーが何をしたいかを指定しtます/etc/cron.d/myjob。しかし、誰のクローンの仕事ですか?わからないので、以下の2つのコマンドを試しました。私が作成したタスクも表示されません。

$ crontab -l
no crontab for t
$ sudo crontab -l
[sudo] password for t: 
no crontab for root

私の/etc/crontabは/etc/cron.d/の下のファイルを明示的に読みません。下記をご覧ください。これが私のクローンジョブが実行されていない理由かもしれませんか?ありがとうございます。

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

修正する:

ありがとう、ジェフ。権限を変更すると問題が解決/etc/cron.d/myjobします。rw-r--r--私の作業ファイルの元のrw-rw-r--権限は機能しませんが、rw-r--r--必要な理由は何ですか?/etc/cron.d/以下のファイルには/etc/cron.daily/同じ権限が必要ですかrw-r--r--

/etc/crontabファイルを明示的に読む必要がないのはなぜですか/etc/cron.d/

答え1

第1四半期

私の作業ファイルの元のrw-rw-r--権限が機能しないのはなぜですか?

からman cron

/etc/crontab および /etc/cron.d のファイルは、ルートが所有する必要があり、グループ化または書き込みはできません。

したがって、内部ファイルは次/etc/cron.dのようになります。

chown root:root /etc/cron.d/*
chmod go-wx /etc/cron.d/*
chmod -x /etc/cron.d/*

第2四半期

/etc/crontabが/etc/cron.d/の下のファイルを明示的に読む必要がないのはなぜですか?

いいえ、そうではありません。もちろんman 5 crontab

/etc/crontab:システム全体のcrontab他のcrontabとは異なり、このファイルと/etc/cron.dのファイルを編集するときは、新しいバージョンをインストールするために「crontab」コマンドを実行する必要はありません。このファイルには、他のcrontabにはないユーザー名フィールドもあります。

これはcrontab -e、新しいcronジョブを実行せずに編集してインストールできることを意味します。以下のファイルは、/etc/cron.d/次のユーザーが読んで解釈しました。cron一度編集しました。そして、ここで定義されたタスクは、crontab実行可能ファイルを呼び出さずにスケジュールどおりに実行されます。

警告する

ただし、次の内容もお読みくださいman cron

通常、システム管理者は/etc/cron.d/を使用せず、標準システムcrontab /etc/crontabを使用する必要があります。

これはcrontab -e、cronジョブを作成するために実行することを意味します。

一般的に、/etc/crontab直接編集(またはファイル)するのは悪い考えです。特に新規ユーザーにとってはさらにそうです。/etc/cron.dcronタスクの使用と管理に慣れてcrontab -eからcrontab -l(長い)時間が経つと、それが何をしているのかを/etc/crontab理解しようとすることができます。

関連


編集する

あなたが尋ねた後:

crontab -eは/etc/cron.d/からcronジョブを作成できますか?

いいえ、私の言葉はその意味ではありませんでした。 Cronタスク(ユーザー用)を使用できます/var/spool/cron/crontabs(Debianに似たディストリビューションで)。ここがcrontab -eコマンドで編集される場所です。

通常、(以前に)編集されるのは作業であり、インストールされ/etc/crontabsystemソフトウェアパッケージ(anacronなど)を使用して自分の作業をスケジュールします。このファイルは、ユーザーが編集する必要があるファイルではありません。 Debianには、ファイルの編集中にエラーを防ぐために新しいタスクを追加できるディレクトリがあります(/etc/crontab)。ただし、このディレクトリ/etc/cron.d/はまだユーザー(または管理者)が手動で編集できるディレクトリではありません。

これは、ユーザーにファイル/etc/sudoersを編集しない理由を尋ねるのと似ています。

もちろん、ユーザー(ルート)もnano /etc/sudoersファイルを実行して変更できます。システムはルートをブロックしません。しかし、これは「悪い考え」です。

crontabのマニュアルは、ユーザーではなく開発者と会話するために書かれているため、誤解を招く可能性があります。開発者がこれらのファイルで何をすべきかを説明します。

なぜ

/etc/crontab関連:(または/etc/cron.d)を追加する理由は何だと思いますか?

これら2つの場所のファイルには「行」が含まれ、各行は操作です。
で編集した行はまったく同じですcrontab -e。各行はcronによって実行されるジョブです。唯一の違いは、両方の場所で作業行に「ユーザー」という追加のフィールドが含まれていることです。しかし:

crontab -u user1 -e

「user1」で実行される新しい行(タスク)も追加されます(コマンドを実行しているユーザーに正しい権限がある場合)。唯一の(実質的な)違いは、ユーザーがこれらのタスクを編集できますが、その/etc/crontabタスクは編集できないことです/etc/cron.d/。ユーザーが他のユーザーの仕事を編集するのを防ぐのは私にとっては良い考えのようです。

つまり、場所を追加しますcrontab -e

関連情報