簡體   English   中英

從crontab運行bash腳本

[英]Running bash script from crontab

我在從crontab運行以下簡單腳本時遇到困難:

#!/bin/bash
notify-send "battery.sh working"

該文件的權限為rwxr-xr-x並且可以使用bash battery.shsh battery.sh命令之一正常運行。

在我的crontab中,我嘗試使用bashsh以及絕對路徑和本地路徑來運行它。 我當前的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM