Crontab의 X11 및 파이게임

Crontab의 X11 및 파이게임

파이게임 예제 끝에 있는 것과 매우 유사한 스크립트가 있습니다.페이지, 전체 시스템이 시작 시 명령을 수신할 수 있도록 시작 시 이를 실행하고 싶습니다. 첫 번째 줄에 "@reboot python3 myscript.py"를 사용하여 "crontab -e"를 실행했습니다. 다시 시작한 후 스크립트가 작동하지 않고 pygame.error: 비디오 시스템이 초기화되지 않음을 반환합니다. 반면에 터미널에서 "python3 myscript.py"를 실행하면 스크립트가 작동합니다.

대다수의 답변은 단순히 pygame.init()가 호출되지 않았다고 명시하지만 여기서는 그렇지 않습니다. 에 따르면우편 엽서독일어로 번역하면 변수를 어딘가로 내보내면 문제가 해결될 수 있지만 어디서 어떻게 해야 할지 잘 모르겠습니다.

Crontab을 다시 시작할 때 실행되는 스크립트에 X11 권한을 부여하는 방법이 있습니까?

업데이트: Seamus가 제안한 것과 같은 명령을 연결할 때 DISPLAY=:0 설정은 전혀 효과가 없습니다. 터미널에서 로그인한 후 $DISPLAY를 echo하고 다음을 얻습니다. 설정할 때:

@reboot (sleep 30; export DISPLAY=:1; python3 /full/path/to/myscript.py) 

로그인 후에는 작동이 시작되지만 이전에는 작동하지 않습니다(장치가 자율적이어야 하므로 이것이 주요 요구 사항입니다). 이 :1이 관련성이 있고 :0이 무엇인지 잘 모르겠습니다.

답변1

스크립트가 명령줄 대신 명령줄에서 실행되는 경우 다음과 같은 cron두 가지 일반적인 의심이 있습니다.

  1. PATH는 cron"일반" 사용자의 경로와 다릅니다. 스크립트의 전체 경로 지정을 사용하여 이 문제를 해결할 수 있습니다.
@reboot python3 /full/path/to/myscript.py 
  1. cron서비스의 상태는 시작 시 알 수 없습니다. 의 경우 는 cron네트워크 가 시작되거나 작업에 필요할 수 있는 기타 서비스가 시작되는 시간이 아니라 시작되는 시간을 @reboot의미합니다 . 이 문제를 해결하는 한 가지 방법은 스크립트를 실행하기 전에 이를 실행하는 것입니다.croncronsleep
@reboot (sleep 30; python3 /full/path/to/myscript.py)  

이렇게 하면 스크립트 실행이 30초 지연됩니다. 30초 정도는 마법 같은 것이 없습니다. 시스템에 따라 다릅니다. 안정적인 수면 시간을 찾기 위해 몇 가지 시행착오 테스트를 수행할 수 있습니다.

cron시스템 서비스 상태의 단점을 피하는 또 다른 방법은 를 사용하는 것입니다 systemd. 일부 사람들(나 자신 포함)은 cron사용하기가 더 쉽다고 생각하지만 systemd확실히 몇 가지 장점이 있습니다.

마지막으로 일반적으로 스크립트를 시작할 때 생성된 오류 메시지를 수집하는 것이 좋습니다. crontab이를 달성하려면 한 줄에 다른 항목을 추가합니다 .

@reboot (sleep 30; python3 /full/path/to/myscript.py >> /home/yours/cronjoblog) 2>&1

모든 오류 메시지는 stderr 지정한 파일에 추가됩니다.

관련 정보