Crontab構文。複数のコマンド


13

次のコマンドチェーンをcronjobとして取得したいと思います。

* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py

コンソールで動作しますが、cronjobからの出力はありません。

私はこの提案に従って、それを

* * * * * env > /tmp/env.output

envが異なるかどうかを確認します。PATHが異なる以外に関連するものは見つかりませんでした。それで私はセットアップしました

PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py

それでも機能しませんでした。最後に私はそれを

PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
* * * * * env > /tmp/env.output

今回はenv.outputファイルも取得しませんでした。したがって、構文に問題があると思いますが、オンラインで見つけたマルチコマンドの提案とまったく同じように見えます。

何が起きてる?それが明らかでない場合、エラーを追跡するために次に何ができますか?

PATH=/usr/local/anaconda2/envs/myenv3/bin:~/.conda:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

out.err

/bin/sh: 6: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
/bin/sh: 15: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
/bin/sh: 17: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
Only bash and zsh are supported

回答:


16

Ubuntuでは、デフォルトで、cronデーモンはshdash)シェルを使用してすべてのジョブを実行し、組み込みdashはありませんsource

つまり、POSIXの方法を使用する必要があります.

* * * * * . activate myenv3 && cd ~/foo/bar && python sssb.py

または、ジョブを引数として実行することもできますbash

* * * * * "$(command -v bash)" -c 'source activate myenv3 && cd ~/foo/bar && python sssb.py'

これで/tmp/env.outputファイルが再び作成されましたが、メインファイルからの出力はまだありません。
FooBar 2016年

1
@FooBarの出力はgrep SHELL /tmp/env.output何ですか?また、最初のジョブを次のように実行し* * * * * ( . activate myenv3 && cd ~/foo/bar && python sssb.py ) >/tmp/out.err 2>&1、内容を確認します/tmp/out.err
heemayl

SHELL = / bin / shと表示されています。の出力out.errと質問に貼り付けた実際のPATHを貼り付けます。
FooBar 2016年

1
カプセル化のための+1を使用して$(command -v bash) -c ' ... '-(それほどではない)厄介な詳細に入ることなくtigaboo全体を解決します。
Cbhihe

1
コマンド-v part of "$(command -v bash)" -c '...'は無意味です。ただやるbash -c '...'
-geirha
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.