whichコマンドはcronを介して何も返しませんが、consoleを介して機能します。


1

私はいくつかのGITコマンドを実行する必要があるhaXe + Nekoで小さなユーティリティを書きました。 GIT実行可能ファイルへのパスをハードコーディングしないようにするには、 どっち それがどこにあるかを調べるためのコマンド。コンソールから手動で実行した場合、すべてが期待どおりに機能しますが、アプリがcronジョブで実行されている場合には機能しません。

制限された環境を知っています( ここに または ここに )cronを使ってスクリプトを実行したが、それでもうまくいかないことに驚いた。

/usr/bin/which git >> /home/user/git.txt

テキストファイルは作成されましたが、内容が空です。繰り返しますが、コンソールから実行すると、期待通りに動作します。

何か案は?私はOS X Leopardを使っています。

ありがとう:)

ファン

回答:


3

'which'が実行ファイルを見つけることができれば、あなたのcronコマンドを実行しているシェルインタプリタもそうすることができます。だから私はなぜあなたがこの目的のために 'which'を使いたいのかわかりません。しかし、おそらく明らかではない理由がいくつかあります。

whichコマンドは、$ PATHにリストされているディレクトリを使用して、コマンドの最初の出現箇所を検索します。ほとんどの場合、PATHはあなたが思うとおりに設定されていません。 '/ usr / bin / env>>を追加してみてください。今日から1分後に/home/user/you/env.txtを実行してcrontabに移動します。次に/home/user/you/env.txtを調べて、PATHがどのように設定されているかを確認してください。そのPATHがあなたの目的に適していないなら、あなたは自分でPATHを設定できる小さなシェルスクリプトにすべてのあなたのコマンドを入れる必要があるかもしれません。そのenv.txtファイルで他のエクスポートされた環境変数を調べることもできます。これは、crontabを介して何をしたいのかによっては便利です。


やあ!愚かな間違いを指摘してくれてありがとう。
Juan Delgado

2

gitは実際にはどこにありますか /usr/bin/which git コンソールから、それは何を印刷しますか? $ PATHのディレクトリ(Snow Leopardのマシンでは/ usr / binと/ binだけ)にない場合は、 /usr/bin/which 見つからないので、ハードコードするか、次のような行を追加する必要があります。

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

crontabファイルへ。


0

これでうまくいくでしょうか。

/usr/bin/env  git

envコマンドは、コマンドを見つける処理を行い、それ自体は常に/ usr / binにあります(だから私は言われました...)これはPythonスクリプトの一般的なトリックです。しかし、だれもがどこにいようとしているのかに煩わされたくありません。


いいえ。問題は、cronがユーザーのPATHをオーバーライドすることです。 envはプログラムがPATHにある場合にのみ役立ちます。
Mikel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.