[英]Running bash script from crontab
我在從crontab運行以下簡單腳本時遇到困難:
#!/bin/bash
notify-send "battery.sh working"
該文件的權限為rwxr-xr-x
並且可以使用bash battery.sh
和sh battery.sh
命令之一正常運行。
在我的crontab中,我嘗試使用bash
和sh
以及絕對路徑和本地路徑來運行它。 我當前的crontab如下所示:
* * * * * /home/marpangal/battery.sh
* * * * * sh battery.sh
* * * * * bash battery.sh
* * * * * sh /home/marpangal/battery.sh
* * * * * bash /home/marpangal/battery.sh
但是,cron不會執行腳本,並且我沒有收到來自通知發送的消息。
notify-send
需要DBUS_SESSION_BUS_ADDRESS
環境變量才能與當前桌面會話進行通信。 由於cron
在幾乎為空的環境中運行,因此該變量不可用。
但是您可以直接在battery.sh
腳本中進行設置:
export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)
notify-send "Message from cron"
這將查找gnome-session
的進程ID,然后從gnome-sessions
的環境中提取DBUS_SESSION_BUS_ADDRESS
(及其值)。
現在notify-send
可以在您的桌面會話中顯示通知。
Flopps的答案給了我-bash: warning: command substitution: ignored null byte in input
–因此,我嘗試了一些不同的操作:
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
notify-send "Message from cron"
我認為這不像原始導出那樣靈活,但是它在我的用戶crontab中對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.