web-dev-qa-db-ja.com

cron.dailyジョブが実行されていません

毎日3つのcronジョブを作成して実行しました。

以下はetc/cron.dailyに配置される3つです

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' [email protected]

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" [email protected]

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' [email protected]

[email protected] ofcourseをメールに置き換えました。

このcronjobを手動で実行すると、正常に動作します./nameoffile.sh

しかし、それは毎日実行されません。何が原因なのか、どうすればこれを確認できますか?

19
sonicboom

通常、cronジョブが実行できない原因となる可能性のある2つの疑いがあります。

1つ目は権限の問題です。つまり、ユーザーはスクリプト/コマンドを実行できますが、ジョブが間違ったユーザーのcronジョブにあるため、cronデーモンは実行できません。たとえば、ユーザーはスクリプトを作成するか、Sudoを使用して昇格された特権でコマンドを実行し、テストされたスクリプト/コマンドをcronジョブのリスト(crontab)に追加します。その結果、昇格された特権が必要になるため、ユーザーのcronジョブを実行できなくなります。

  • 現在のユーザーのcrontabにcronジョブを配置するには、crontab -eと入力します
  • Cronジョブをルートのcrontabに入れるには、Sudo crontab -eと入力します

2番目の理由はパスです。スクリプトが確実に実行されるようにするために、ユーザーはcrontabで実行されるスクリプトに完全なパスを追加する必要があります。別の解決策は、crontabファイルの先頭に次の行を追加して、rootユーザーのPATH変数を拡張することです。

PATH=/usr/sbin:/usr/bin:/sbin:/bin

コミュニティWikiとして メンション

community wiki について読むと、上記の詳細がわかります。

6
Stef K

this responseによると、問題は.sh拡張子にあります。それを削除します(たとえば、ファイル名をrkhunter.shからrkhunterに変更します。

確認するには、次のコマンドを実行しますrun-parts --test /etc/cron.daily

スクリプト(rkhunter)が結果に含まれている場合、すべてが適切です。 run-partsコマンドの詳細については、そのマニュアルページman run-partsを参照してください

73
user19366

私のシステムでは、anacronがインストールされていなかったためです。

grep run-parts /etc/crontab

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 )

したがって、anacronをインストールするか、テスト-x/usr/sbin/anacronを削除してください。

10
Natim

拡張子を持つファイルは無視されると思います。

実行:

 run-parts --test /etc/cron.daily

スクリプトがリストに表示されない場合は、.sh拡張子を削除してから再試行してください。

8
rharriso

Stefの回答に加えて、実行可能ビットがあることも確認する必要があります。

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

chmod +x filenameを使用して実行できるはずです。

5
Braiam

.sh拡張子を持たないようにファイルの名前を変更します

これが問題であることを確認するには、試してください

Sudo run-parts --list /etc/cron.daily 

リストにないことがわかります。だから実行:

mv script.sh script

もう一度リストしてみてください。リストされるはずです。

4
Elan Kivity

Anacronで実行できなかったので、/etc/crontabからanacronを削除してapt remove --purge anacronを実行しましたが、すぐに動作します。

2つのスケジューラが必要な理由がわかりません。

0
Patrik Laszlo