Chciałbym uzyskać następujący łańcuch poleceń jako cronjob:
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
Działa w konsoli, ale nie otrzymuję żadnych danych wyjściowych z cronjob.
Zastosowałem się do tej sugestii, zastępując ją
* * * * * env > /tmp/env.output
aby dowiedzieć się, czy env jest inny. Nie mogłem znaleźć nic istotnego poza tym, że PATH jest inny. Więc wtedy ustawiłem
PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
i nadal nie działało. W końcu zastąpiłem go
PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
* * * * * env > /tmp/env.output
i tym razem nawet nie dostałem env.output
pliku. Dlatego myślę, że coś jest nie tak z moją składnią - ale wygląda dokładnie tak, jak sugestie dotyczące wielu poleceń, które znalazłem w Internecie.
Co tu się dzieje? Jeśli nie jest to oczywiste, co mogę dalej wykryć błąd?
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
grep SHELL /tmp/env.output
?* * * * * ( . activate myenv3 && cd ~/foo/bar && python sssb.py ) >/tmp/out.err 2>&1
/tmp/out.err
out.err
i rzeczywistą ŚCIEŻKĘ, którą wkleiłem do pytania.$(command -v bash) -c ' ... '
- rozwiązuje cały tigaboo bez wchodzenia w (nie tak) niechlujne szczegóły."$(command -v bash)" -c '...'
jest bezcelowe. Po prostu zróbbash -c '...'