하위 프로세스가 종료되어 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 변수를 찾아야 합니다. 지침에 따라 변수를 성공적으로 설정했습니다.

이제 내 스크립트가 작동합니다!

관련 정보