재부팅 시 쉘 스크립트를 실행하여 이를 crontab에 넣습니다.
@daily apt-get update && apt-get upgrade -y
@reboot bash /root/Start.sh
@reboot /bin/bash -c 'sleep 10 && /bin/mount -a'
...
셸 스크립트는 다른 .py 스크립트를 성공적으로 시작했기 때문에 실행되지만 내부에서 모든 스크립트(Trouble.py 제외)를 시작하지는 않습니다.
그러나 쉘 스크립트를 직접 실행하면 다음과 같습니다.
bash Start.sh
.sh의 모든 스크립트가 실행됩니다.
이것은 내 쉘 스크립트입니다.
sleep 15
python3 /root/.../trouble.py > /root/error_log_bash.txt
python3 /root/.../working1.py &
python3 /root/.../working2.py &
내가 지금까지 시도한 것 :
- .sh의 순서 변경
- 수면 전과 후의 수면 시간이 다릅니다
- chmod +x .py 스크립트
- 또 다른 유사한 스크립트를 실행했는데 예상대로 작동했습니다.
- error_log_bash.txt를 확인했지만 비어 있습니다.
- .sh에서 sudo 시작
다른 스크립트와 함께 사용하고 있어서 스크립트에 문제가 있는 것인지 궁금합니다. 그러나 수동으로 작업하기 때문에 이것을 상상하기는 어렵습니다. 내가 뭐 놓친 거 없니? 이 행동을 유발할 수 있는 요인은 무엇입니까? 저는 데비안을 루트로 사용하고 있습니다.
#Edit @Waltinator cron과 일반 환경의 차이점을 지적해 주셔서 감사합니다. 수동 콘솔을 사용하여 bash /root/Start.sh 대신 sh /root/Start.sh를 실행하면 오류가 발생하지 않습니다.
답변1
이것은 답변이라기보다 댓글에 가깝지만 댓글에 줄이 너무 많습니다.
- 귀하의 경우에 달성하고자 하는 것이 전혀 명확하지 않습니다. 작동하지 않는다고 설명했지만 원하는 것은 아닙니다.
- 귀하가 작성한 코드의 인터프리터를 식별해야 하는 스크립트의 첫 번째 줄이 누락되었습니다. 귀하의 경우에는
#!/bin/sh
이것으로 충분할 수 있습니다 . - 넌 못 잡았어표준 에러에서 출력됩니다
trouble.py
. 이것은 문제가 될 수도 있고 아닐 수도 있지만, 잡아보지 않으면 알 수 없습니다. - 두 백그라운드 작업의 출력을 전혀 캡처하지 않습니다.
- 스크립트에서 오류 출력을 캡처하지 않습니다. 예를 들어,
python3
찾을 수 없으면 유용한 출력을 얻을 수 없습니다.
다음은 샘플 교체 스크립트입니다.
#!/bin/sh
sleep 15
python3 /root/.../trouble.py >/root/trouble.log 2>&1
python3 /root/.../working1.py >/root/working1.log 2>&1 &
python3 /root/.../working2.py >/root/working2.log 2>&1 &
다음은 모든 출력을 보내는 것에 대한 대안입니다(표준 출력그리고표준 에러스크립트와 세 가지 Python 프로그램의 경우)를 단일 파일로trouble.log
#!/bin/sh
sleep 15
exec >/root/trouble.log 2>&1
python3 /root/.../trouble.py
python3 /root/.../working1.py &
python3 /root/.../working2.py &
그런 다음 스크립트를 실행 가능하게 만듭니다. 호출하면 괜찮 runit
습니다 chmod a+rx runit
. 이제 다음과 같은 경로를 통해 스크립트를 실행할 수 있습니다./root/runit