rootとして実行する必要があり、デフォルトのshシェルの代わりにbashを必要とするcronジョブがあります。
crontabには正常に実行される他のジョブがあり、ファイルの上部に指定してジョブが中断されるroot
危険を冒したくありません。SHELL=/bin/bash
crontab
他の既存のジョブで使用されるシェルを変更せずにbashを使用して自分のcronジョブを実行するように指定するにはどうすればよいですか?
私はこのような行がトリックを行うことができると思います0 * * * * SHELL=/bin/bash myjob
が、CentOSのcronドキュメントではこれに関する言及を見つけることができません。
また、私の作業(ファイルの最後の変数)の前にSHELL変数を設定するとうまくいくかもしれないと思いましたが、環境変数の配置の効果とドキュメントの順序で割り当てられているか、単に割り当てられたかについてのドキュメントが見つかりませんでした。場所にかかわらずグローバルと見なされます(またはすべての操作が前でないとエラーが発生する可能性があります)。
操作に応じてシェルを指定できますか?
答え1
シェルを指定する最も直接的な方法は、シェルの実行可能ファイルを呼び出すことです。たとえば、myjob
usingというコマンドを実行するには、bash
次のコマンドラインのようなものを使用します。
/bin/bash -c 'myjob'
対応するcrontabエントリは次のとおりです。
0 * * * * /bin/bash -c 'myjob'
または、myjob
スクリプトの場合は、次のコマンドラインのようなものを使用できます。
/bin/bash '/path/to/myjob'
対応するcrontabエントリは次のとおりです。
0 * * * * /bin/bash '/path/to/myjob'
答え2
シェルスクリプトの場合は、実行可能であり、-lineがスクリプトファイルの正しいインタプリタ(たとえば)を指定していることをmyjob
確認してください。それはすべてです。#!
#!/bin/bash
一連のコマンドの場合は、次のものを配置することをお勧めします。それらbash
スクリプトで上記#!
のように適切な -line を使用します。
これにより、crontabエントリを正しくインポートする詳細(スクリプトを実行するタイミングを除く)についてあまり心配する必要がなくなります。また、Python、Perl、または他のシェルバリアントでスクリプトを再実装するときにcronjobを更新する必要はありません。