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/bin
cronの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'
ただし、この時点ではコマンドをシェルスクリプトに入れる必要があります。