毎日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
しかし、それは毎日実行されません。何が原因なのか、どうすればこれを確認できますか?
通常、cron
ジョブが実行できない原因となる可能性のある2つの疑いがあります。
1つ目は権限の問題です。つまり、ユーザーはスクリプト/コマンドを実行できますが、ジョブが間違ったユーザーのcronジョブにあるため、cronデーモンは実行できません。たとえば、ユーザーはスクリプトを作成するか、Sudo
を使用して昇格された特権でコマンドを実行し、テストされたスクリプト/コマンドをcronジョブのリスト(crontab
)に追加します。その結果、昇格された特権が必要になるため、ユーザーのcronジョブを実行できなくなります。
crontab -e
と入力しますSudo crontab -e
と入力します2番目の理由はパスです。スクリプトが確実に実行されるようにするために、ユーザーはcrontabで実行されるスクリプトに完全なパスを追加する必要があります。別の解決策は、crontabファイルの先頭に次の行を追加して、rootユーザーのPATH変数を拡張することです。
PATH=/usr/sbin:/usr/bin:/sbin:/bin
コミュニティWikiとして メンション 。
community wiki について読むと、上記の詳細がわかります。
this responseによると、問題は.sh拡張子にあります。それを削除します(たとえば、ファイル名をrkhunter.shからrkhunterに変更します。
確認するには、次のコマンドを実行しますrun-parts --test /etc/cron.daily
スクリプト(rkhunter)が結果に含まれている場合、すべてが適切です。 run-partsコマンドの詳細については、そのマニュアルページman run-parts
を参照してください
私のシステムでは、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を削除してください。
拡張子を持つファイルは無視されると思います。
実行:
run-parts --test /etc/cron.daily
スクリプトがリストに表示されない場合は、.sh拡張子を削除してから再試行してください。
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
を使用して実行できるはずです。
.sh拡張子を持たないようにファイルの名前を変更します
これが問題であることを確認するには、試してください
Sudo run-parts --list /etc/cron.daily
リストにないことがわかります。だから実行:
mv script.sh script
もう一度リストしてみてください。リストされるはずです。
Anacronで実行できなかったので、/etc/crontab
からanacronを削除してapt remove --purge anacron
を実行しましたが、すぐに動作します。
2つのスケジューラが必要な理由がわかりません。