何らかの理由で、私のcrontabはhourly/weekly/etcスクリプトを実行していません。 run-partsが機能していないようで、ローカルマシンでも機能させることができません。使い方に間違いはありませんか?
fabe@fabetop ~ $ cat /home/fabe/tmp/test.sh
#!/bin/sh
touch /home/fabe/tmp/test_it
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------ 2 fabe fabe 4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x 1 fabe fabe 39 Feb 20 15:00 test.sh
fabe@fabetop ~ $ run-parts --report /home/fabe/tmp
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------ 2 fabe fabe 4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x 1 fabe fabe 39 Feb 20 15:00 test.sh
問題はスクリプトの名前です。 man run-parts
から:
--lsbsysinitオプションも--regexオプションも指定されていない場合、名前は完全にASCII大文字と小文字、ASCII数字、ASCIIアンダースコア、およびASCIIマイナスハイフン。
言い換えれば、拡張子はありません。奇妙なことに、--lsbsysinit
オプションを使用しても、対象となる名前空間のいずれにも一致しないため、foo.sh
のようなファイルを指定することはできません。
--lsbsysinitオプションを指定する場合、名前は.dpkg-oldまたは.dpkg-distまたは.dpkg-newまたは.dpkg-tmpで終わることはできず、次の名前空間の1つ以上に属している必要があります。LANANA割り当てられた名前空間(^ [a-z0-9] + $); LSB階層および予約済み名前空間(^ _?([a-z0-9_。] +-)+ [a-z0-9] + $);およびDebiancronスクリプト名前空間(^ [a-zA-Z0-9 _-] + $)。
したがって、foo.sh
が失敗しても、foo.s-h
またはfoo.-sh
は機能します。なぜ彼らがこのようにしたのか私には分かりませんが、おそらく彼らは何らかの基準に従っているのでしょう。
とにかく、2つのオプションがあります。拡張子がないようにスクリプトの名前を変更するか(拡張子は* nixではオプションです)、run-parts
の使用を完全にスキップできます。代わりにcrontab
でこれを使用してください。
find /home/fabe/tmp/ -Prune -type f -executable -exec {} \;
上記のコマンドは、ターゲットディレクトリ内のすべての実行可能ファイルを検索して実行します。 -executable
はGNU拡張子だと思いますが、これをLinuxとしてタグ付けしているので、GNU findがあると思います。
フォルダに配置されたすべてのスクリプト/etc/cron.hourly
は1時間ごとに実行されます。
ただし、ファイルは次のようにする必要があります。
(^[a-zA-Z0-9_-]+$)
。たとえば、拡張子(.sh
この場合)、それは機能しません。
実行されるスクリプトの名前を出力するには、次のことを試してください。
Sudo run-parts --report --test /etc/cron.hourly