Crontab sözdizimi; Çoklu komutlar


14

Bir cronjob olarak aşağıdaki komutlar zincirini almak istiyorum:

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

Konsolda çalışıyor, ancak cronjob'dan herhangi bir çıktı almıyorum.

Ben takip bu ile değiştirerek, öneri

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

env'in farklı olup olmadığını öğrenmek için. PATH'ın farklı olmasının yanı sıra alakalı bir şey bulamadım. Sonra ayarladım

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

ve hala işe yaramadı. Sonunda onun yerine

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

ve bu sefer env.outputdosyayı bile alamadım . Bu yüzden sözdizimimde yanlış bir şey olduğunu düşünüyorum - ancak tam olarak çevrimiçi bulduğum çoklu komut önerilerine benziyor.

Burada neler oluyor? Açık değilse, hatayı takip etmek için ne yapabilirim?

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

Yanıtlar:


16

Ubuntu'da, varsayılan olarak, cronarka plan programı sh( dash) kabuğunu kullanarak tüm işleri çalıştırır ve yerleşik dashdeğildir source.

POSIX yolunu kullanmanız gerekir, örneğin .:

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

Alternatif olarak, işi aşağıdakiler için bağımsız değişken olarak çalıştırabilirsiniz bash:

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

Şimdi yine bir /tmp/env.output dosyası var, ama yine de ana dosyadan çıktı yok.
FooBar

1
@FooBar çıktı grep SHELL /tmp/env.outputnedir? Ayrıca ilk işi olarak çalıştırın ve * * * * * ( . activate myenv3 && cd ~/foo/bar && python sssb.py ) >/tmp/out.err 2>&1içeriğini kontrol edin/tmp/out.err
heemayl

SHELL = / bin / sh yazıyor. Ben çıktısını yapıştırın edeceğiz out.errve söz yapıştırılır fiili YOL I.
FooBar

1
Kullanarak kapsülleme için +1 $(command -v bash) -c ' ... '- tüm tigaboo'yu dağınık ayrıntılara girmeden çözer.
Cbhihe

1
-V bölümü komutu "$(command -v bash)" -c '...'anlamsızdır. Just dobash -c '...'
geirha
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.