cronはPATHでいくつかのコマンドを探しますが、他のコマンドは見つけません。

cronはPATHでいくつかのコマンドを探しますが、他のコマンドは見つけません。

PATHとSHELLが正しく設定されているにもかかわらず、crontabで特定のコマンドを実行するのに問題があります。

これは機械の環境です:

SHELL=/bin/bash
USER=ubuntu
MAIL=/var/mail/ubuntu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin

cron環境は次のとおりです(同じように見えます)。

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin
PWD=/home/ubuntu

それからcrontabで:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin
SHELL=/bin/bash
*/1 * * * * "whoami"
*/1 * * * * "whoami && which whoami"

最初のwhoamiタスクは成功しますが、2番目のタスクは次のように失敗します。

/bin/bash: whoami && which whoami: command not found

which見つからなかったからです。しかし、これは奇妙です。

$ which whoami
/usr/bin/whoami

$ which which
/usr/bin/which

/usr/bincronのPATHにあります。何を提供しますか?

答え1

クローンの操作を参照しないでください。

あなたは

*/1 * * * * "whoami && which whoami"

文字通りと呼ばれる命令ですwhoami && which whoami。たとえば/usr/bin/whoami && which whoami。明らかに、このコマンドは存在しません。コマンドが正しく解釈されるように引用符を削除します。

*/1 * * * * whoami && which whoami

答え2

一般に、1つのcronジョブで複数のコマンドを実行するには、そのコマンドをスクリプトに入れる必要があります。

このような宣言には二重引用符を追加しないでください。文字通りと見ることができます。インラインで実行する場合は、次のことができます。bash -c 'whoami && which whoami'

ただし、この時点ではコマンドをシェルスクリプトに入れる必要があります。

関連情報