알림을 보내도록 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 변수를 찾아야 합니다. 지침에 따라 변수를 성공적으로 설정했습니다.
이제 내 스크립트가 작동합니다!