パイゲームの例の最後にあるのとよく似たスクリプトがあります。ページシステム全体が起動時にコマンドを受信できるように、起動時にそれを実行したいと思います。最初の行に「@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
的な疑問があります。
- PATHは
cron
「一般」ユーザーのパスとは異なります。スクリプトのフルパスを使用してこの問題を解決できます。
@reboot python3 /full/path/to/myscript.py
cron
サービスの状態は起動時には不明です。の場合は、cron
ネットワークが起動したり、ジョブに必要なその他のサービスが開始される時間ではなく、開始される時間を@reboot
意味します。この問題を解決する1つの方法は、スクリプトを実行する前にそれを実行することです。cron
cron
sleep
@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
指定したファイルに追加されます。