Crontab 구문; 여러 명령


14

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

우분투에서, cron데몬은 기본적으로 sh( dash) 쉘을 사용하여 모든 작업을 실행하며 내장 되어 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

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

1
사용하여 캡슐화에 + $(command -v bash) -c ' ... '1-지저분한 세부 사항에 들어 가지 않고 전체 tigaboo를 해결합니다.
Cbhihe

1
-v part of 명령은 의미 "$(command -v bash)" -c '...'가 없습니다. 그냥bash -c '...'
geirha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.