ファイルを作成してクローンジョブを設定しようとしています/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.d
cronタスクの使用と管理に慣れてcrontab -e
からcrontab -l
(長い)時間が経つと、それが何をしているのかを/etc/crontab
理解しようとすることができます。
編集する
あなたが尋ねた後:
crontab -eは/etc/cron.d/からcronジョブを作成できますか?
いいえ、私の言葉はその意味ではありませんでした。 Cronタスク(ユーザー用)を使用できます/var/spool/cron/crontabs
(Debianに似たディストリビューションで)。ここがcrontab -e
コマンドで編集される場所です。
通常、(以前に)編集されるのは作業であり、インストールされ/etc/crontab
たsystem
ソフトウェアパッケージ(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
。