내 crontab은 다음과 같습니다.
@reboot sh /home/pi/LCDinterface/shutdownlauncher.sh 2>&1 | tee -a /home/cronlog
콘텐츠 shutdownlauncher.sh
:
cd /
cd home/pi/LCDinterface
date
python shutdown.py
echo ''
cd /
콘텐츠 shutdown.py
:
if interrupt_happens:
print ("shutting down")
time.sleep(3)
os.system("sudo shutdown -h now")
실행하거나 실행하면 python shutdown.py
터미널 sh shutdownlauncher.sh
에서 항상 "닫기"라는 출력 텍스트를 볼 수 있습니다. 그러나 cron만 bash 스크립트 실행을 시작하면 Python 스크립트가 호출됩니다. 나는 그 텍스트를 본 적이 없으며 로그에도 나타나지 않습니다. sh 스크립트의 명령은 date
내 로그에는 표시되지만 터미널에는 표시되지 않습니다. 도와주세요? shutdownlauncher.sh
터미널과 로그에서 출력을 보기 위해 작업을 편집하거나 크론하려면 어떻게 해야 합니까 ? 전체 프로세스는 Raspberry Pi 3에서 실행되며 SSH를 통해 연결합니다.
내 로그 파일 내용:
Fri Apr 7 19:26:33 CEST 2017
Fri Apr 7 19:36:11 CEST 2017
Fri Apr 7 21:18:45 CEST 2017
Sat Apr 8 00:08:09 CEST 2017
Sat Apr 8 00:29:31 CEST 2017
Sat Apr 8 10:08:17 CEST 2017
Sat Apr 8 11:58:35 CEST 2017
답변1
인쇄 기능 대신 모듈을 사용해보십시오 syslog
.
import syslog
syslog.syslog('System is going to shutdown')
답변2
비교하다:
python3 -c 'import time; print("foo"); time.sleep(1); print("bar")'
그리고:
python3 -c 'import time; print("foo"); time.sleep(1); print("bar")' | cat
python3
when의 출력이 해당 파이프로 들어가고 foo
마지막 bar
에만 인쇄된다는 것을 알 수 있습니다 .
또는:
$ python3 -c 'import os, signal; print("foo"); os.kill(os.getpid(), signal.SIGTERM); print("bar")'
foo
zsh: terminated python3 -c
$ python3 -c 'import os, signal; print("foo"); os.kill(os.getpid(), signal.SIGTERM); print("bar")' | cat
zsh: terminated python3 -c |
zsh: done cat
대부분의 언어와 마찬가지로 표준 출력이 사용자가 사용하기 위해 터미널 장치로 전송되지 않으면 너무 많은 불필요한 쓰기를 수행할 필요가 없도록 버퍼링됩니다.
shutdown
이 스크립트를 포함한 모든 프로세스는 결국 종료되므로 버퍼 python
는 플러시되지 않습니다.
다음을 호출하기 전에 표준 출력 버퍼를 플러시 shutdown
하도록 명시적으로 요청할 수 있습니다 kill
.
$ python3 -c 'import os, signal, sys; print("foo"); sys.stdout.flush(); os.kill(os.getpid(), signal.SIGTERM); print("bar")' | cat
foo
zsh: terminated python3 -c |
zsh: done cat
하지만 여기서 메시지는 stdout 대신 stderr로 전송되어야 하며, tty 장치로 전송되지 않더라도 stderr은 버퍼링되지 않으므로 다음과 같습니다.
$ python3 -c 'import os, signal, sys; print("foo", file=sys.stderr); os.kill(os.getpid(), signal.SIGTERM); print("bar")' 2>&1 | cat
foo
zsh: terminated python3 -c 2>&1 |
zsh: done cat