私のユーザーのcrontabで、CentOSシステムでは、次のようなものがあります。
58 12 * * * cd /home/joe/dev; echo `pwd` | logger
これは/ var/log/messagesに出力します:
Feb 19 12:58:01 srv01 joe: /home/joe
出力する代わりに:
Feb 19 12:58:01 srv01 joe: /home/joe/dev
pwd
を出力するときにディレクトリが保持されないのはなぜですか?
コマンドは独立して実行されているため、同じシェル/環境で実行されることを期待するのと同じではありません。おそらく、目的のコマンドを実行するシェルスクリプトを作成してから、そのスクリプトをcrontabから呼び出すことをお勧めします。
更新:上記は推測および/または提案された可能性です(コメントとして簡潔かつ積極的に指摘されました)。それで、CentOS 6.6でテストすることに決めました、そして...私は間違っていました...次のcrontabエントリは適切に機能しました:
* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;
これでうまくいくはずです... crontabの個々のコマンドではなく、スクリプトを呼び出すことでサーバーを最適に保つことができると思いますが、それは優先設定です(コメントで親切にしてください...)。
以下はうまくいくはずです:
58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)
コマンドを括弧で囲むことにより、それらすべてを強制的に同じサブシェルで実行する必要があります。
このUnix&Linux SEの回答 のように、;
を&&
に置き換えることができます。これは、異なるLinuxディストリビューション間で異なるバージョンのcronがこのタイプの機能を異なる方法で処理するためです。
cd /home/joe/dev && echo `pwd` | logger