サブプロセスが終了してdbus-laauchが失敗する

サブプロセスが終了してdbus-laauchが失敗する

通知を送信するようにPythonスクリプトが必要です。スクリプトが正常に実行され、私が望むものを表示します。しかし、crontabは正しい方法で起動しません。

以下はlibnotifyを参照するコードです。

def SendMessage(title, message):
    pynotify.init("ChinaBank")
    notice = pynotify.Notification(title,message)
    notice.show()
    return

私がcrontabでやったことは次のとおりです。

* * * * * display=`/home/li/script/FetchDisplay.sh` && export DISPLAY=$display && /home/li/projects/fetch-data/EuroForex.py 2>/home/li/error

ここで、FetchDisplay.shは次のように表示コンテンツを取得します。

#!/bin/bash 

if [ "$DISPLAY" != "" ]; then
        echo $DISPLAY
        exit
fi

if ["$USER" = "" ]; then
        USER=`whoami`
fi

pinky -fw | awk -v user=$USER 'NF == 6 {if($1 == user) {print $6}}' | awk 'NR==1{print $0}

エラー出力は次のとおりです。

Traceback (most recent call last):
  File "/home/li/projects/fetch-data/EuroForex.py", line 43, in <module>
    SendMessage("Please be ready to sell", str(SellData))  
  File "/home/li/projects/fetch-data/EuroForex.py", line 15, in SendMessage
    notice.show()
glib.GError: Error spawning command line 'dbus-launch --autolaunch=970be6bbf9ff49009918057c308cf56e --binary-syntax --close-stderr': Child process exited with code 1

わかると、モニター:0、コマンドを通して

echo $DISPLAY

だから私はgnome-screensaver-commandをテストしました。

* * * * *  export DISPLAY=:0 && /usr/bin/gnome-screensaver-command --lock 2>/home/li/screenerror

残念ながら動作しておらず、出力は次のようになります。

** Message: Failed to get session bus: Error spawning command line 'dbus-launch --autolaunch=970be6bbf9ff49009918057c308cf56e --binary-syntax --close-stderr': Child process exited with code 1

DISPLAYの問題だと思いましたが、DISPLAY変数が正しいです。何が起こったのか教えてもらえますか?

答え1

私はここで答えを見つけました。 cronを使用してUbuntuでPidgin IMステータスを更新する

cronは独自の環境で実行されるため、DBUS_SESSION_BUS_ADDRESS、XAUTHORITY、およびDISPLAY変数を見つける必要があります。指示に従って変数を正常に設定しました。

今私のスクリプトが動作します!

関連情報