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

スクリプトがコマンドラインではなくコマンドラインで実行されている場合は、次の2つの一般cron的な疑問があります。

  1. PATHはcron「一般」ユーザーのパスとは異なります。スクリプトのフルパスを使用してこの問題を解決できます。
@reboot python3 /full/path/to/myscript.py 
  1. cronサービスの状態は起動時には不明です。の場合は、cronネットワークが起動したり、ジョブに必要なその他のサービスが開始される時間ではなく、開始される時間を@reboot意味します。この問題を解決する1つの方法は、スクリプトを実行する前にそれを実行することです。croncronsleep
@reboot (sleep 30; python3 /full/path/to/myscript.py)  

これにより、スクリプトの実行が30秒遅れます。 30秒ほどは魔法のようなものはありません。システムによって異なります。安定した睡眠時間を見つけるために、いくつかの試行錯誤テストを実行できます。

cronシステムサービスの状態の欠点を避けるもう1つの方法はを使用することですsystemd。一部の人(自分自身を含む)はcron使いやすいと思いますが、systemd確かにいくつかの利点があります。

最後に、通常、スクリプトの起動時に生成されたエラーメッセージを収集することをお勧めします。crontabこれを達成するには、1行に別の項目を追加します。

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

すべてのエラーメッセージはstderr 指定したファイルに追加されます。

おすすめ記事