从命令行运行而不是从Crontab运行时,反引号在ruby脚本中工作

时间:2019-03-18 17:33:53

标签: ruby ubuntu cron backticks

我有一个带命令的Ruby脚本

`notify-send "Error in EYW Spaces script" "#{Shellwords.escape(message)}"`

如果仅从命令行运行脚本,则会收到弹出消息,但如果将脚本放入crontab中,则会显示

*/5 * * * * ruby ~/software_dev/scripts/new_script.rb

然后什么也没有发生。我知道脚本正在正确运行,因为我正在通过电子邮件将脚本输出发送给我,但只是弹出窗口没有出现。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

看起来这不是特定的红宝石问题,但这是由于从crontab调用notify-send而引起的。

https://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab

一种解决方案是在脚本中添加DISPLAY=:0

`DISPLAY=:0 notify-send "Error in EYW Spaces script" "#{Shellwords.escape(message)}"`

答案 1 :(得分:0)

可能的问题:

  • 运行crontab的用户(root,you,???)及其系统权限
  • $ while read key value; do echo $key $value ;done <<EOF > c 3 > e 5 > EOF c 3 e 5 $ echo -e 'c 3\ne 5' > file $ while read key value; do echo $key $value ;done <file c 3 e 5 $ echo -e 'c,3\ne,5' > file $ while IFS=, read key value; do echo $key $value ;done <file c 3 e 5 版本和该用户ruby中的notify-send
  • 未在cron中指定PATH变量

尝试一下(将数字更改为正确的DISPLAY值)->

DISPLAY

可能会有所帮助: https://unix.stackexchange.com/questions/10121/open-a-window-on-a-remote-x-display-why-cannot-open-display