web-dev-qa-db-ja.com

なぜcdはcrontabの現在のディレクトリを変更しないのですか?

私のユーザーの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を出力するときにディレクトリが保持されないのはなぜですか?

3
Martinos

コマンドは独立して実行されているため、同じシェル/環境で実行されることを期待するのと同じではありません。おそらく、目的のコマンドを実行するシェルスクリプトを作成してから、そのスクリプトをcrontabから呼び出すことをお勧めします。

更新:上記は推測および/または提案された可能性です(コメントとして簡潔かつ積極的に指摘されました)。それで、CentOS 6.6でテストすることに決めました、そして...私は間違っていました...次のcrontabエントリは適切に機能しました:

* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;

これでうまくいくはずです... crontabの個々のコマンドではなく、スクリプトを呼び出すことでサーバーを最適に保つことができると思いますが、それは優先設定です(コメントで親切にしてください...)。

6
BeepBeep

以下はうまくいくはずです:

58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)

コマンドを括弧で囲むことにより、それらすべてを強制的に同じサブシェルで実行する必要があります。

4
Arul Selvan

このUnix&Linux SEの回答 のように、;&&に置き換えることができます。これは、異なるLinuxディストリビューション間で異なるバージョンのcronがこのタイプの機能を異なる方法で処理するためです。

cd /home/joe/dev && echo `pwd` | logger
2
Craig Watson