/etc/cron.dでCrontabが実行されない


32

Debian Jessieで私がしたことは次のとおりです。

  • を介してcronをインストールする apt-get install cron
  • backup_crontabファイルを入れる/etc/cron.d/

ただし、タスクは実行されません。

出力は次のとおりです。

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

特定のcrontabをアクティブにするために、またはcronの「サービス」自体をアクティブにするために何かすることはありますか?


4
すべての出力を/ dev / nullにリダイレクトしているために実行され、エラーで失敗した場合はどうなりますか?:)
19:33にティンク

@tinkは、代わりにファイルの最後に出力を追加することは可能ですか?
ジバン

2
確かです; 0,15,30,45 * * * * /backup.sh >> / tmpに/ testing_cron.out 2>&1
ティンク

@Jivan、ちょっとした注意:出力に関してls /etc/cron.dは同等cd /etc/cron.d && lsです。唯一の違いは、作業ディレクトリが変更されないことです。
ドリューチャピン

回答:


49

/etc/cron.d必要なファイルには、ジョブを実行するユーザーもリストする必要があります。

すなわち

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

また、権限と所有者:グループが正しく設定されていること(-rw-r--r--および所有者root:root)を確認する必要があります


16
crontab -lcronエントリに関するレポート/var/spool/cron/crontabs/-つまり、ユーザーごとの crontab。 /etc/cron.dファイルはシステムcrontabであり、によって報告されませんcrontab -l
スティーブンハリス

5
実際には機能していなかったと言いましたがroot、ファイルに追加した後だということに気付きました- crontab -lあなたが理由を説明したようにそれを言及しませんでした
ジバン

9
ファイル名にも役割があるようです。私の場合は、に追加されたetc/cron.d名前の真ん中にドットを使用してファイルと私はそれ改名されるまで、ジョブは実行されませんでした
PIC

20
ここでも同じ問題があり、ファイル名にダッシュ「-」を付け、アンダースコア「_」に変更すると問題が解決し、ジョブはすぐに実行されました。
ロブ

1
私はダッシュも持っていました...何.....なぜ?!とにかく、@ロブに感謝
ニコライディミトロフ

8

私が観察した別のことは、ファイルに/etc/cron.d拡張子を付けることができないことです。私の場合、シンボリックリンクがありました。

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

ファイル名の制限は、run-partのマニュアルページに記載されています。 http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html)でています。ファイル形式を上書きするために--regexオプションを渡すことができます。

ただし、デフォルトのcronの動作は拡張なしのままでした。https//bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022の下のコメントを参照してください。


男、あなたは私の一日を救った!
エルボレテール

2
これは、Ubuntu(おそらく、すべてのDebian派生ディストリビューション)で正しいです。Amazon Linux(およびすべてのRedhat派生ディストリビューション)では、ファイル名にドットを含めることができます。Unix.SEに感謝します。
法律29

純粋なDebianをチェックしたところ、ドットも機能しません。ダッシュは機能します(上記のコメントとは異なります)。
法律29

4

おそらく、cronファイルの最後から必要な空白行が抜けているだけだと思います。私は同じ問題を抱えていましたが、ここにリストされているすべて(ユーザーのアクセス許可、ファイル名、cronバージョンなど)をチェックした後、私の最後のエントリの後に改行がなく/etc/cron.d/own_cron、ファイル全体が無視されることに気付きました。


2

あなたがこのコンピューターの唯一のユーザーである場合、単にを使用することもできますcrontab -e。コマンドを初めて実行するときに、エディターを選択するように求められます。次に、これを追加できます:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

通常のユーザーアカウントに変更する場合は、sudo crontab -eとして実行するようにスケジュールするスクリプトの構成に使用する必要がありますroot

crontab -lを使用して設定すると、現在のcrontabのみが表示されますcrontab -e/etc/cron.d/にcronファイルがある場合、で表示されませんcrontab -l

また、次を使用してスクリプトが実行可能であることを確認する必要がありますchmod +x /backup.sh


1
感謝-この場合にはcrontabのは、のコンテキストで設定されてDockerfile、私は本当にすることはできませんので、crontab -eそれはとにかく役に立つ情報です-
Jivan

2

* bianディストリビューション(Raspbianなど)-lのCronの場合、Cronデーモンのパラメーターを有効にする必要があります。/etc/default/cron設定ファイルを使用して行うことをお勧めしますEXTRA_OPTS


これはダウン投票されましたが、説明されていませんが、場合によっては正しいです。Debianベースのディストリビューションでは-l、cronデーモンのオプションは/etc/cron.dディレクトリ内のファイル名の拡張セットを許可します。そのため、ファイルにドットが含まれているために黙って無視されている場合、「adding -l」または「removing dot」問題を修正します。
法律29

1

のバージョンを確認してくださいcron

Dillonのcrondを使用している場合は、ユーザーを/etc/cron.dエントリに含める必要はないようです。

私は残りの髪をほとんど引き出した後にこれを理解しました。

/etc/cron.dさまざまなインストールによってドロップされたエントリがいくつかあります。調査の結果、そのうちの1つが機能していることがわかりました。ユーザーがいませんでした。そのため、ユーザーを他のユーザーから削除しました。そして彼らは働き始めました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.