脚本不通过crontab运行,但可以独立运行

我有一个脚本,提醒我如果uptime超过3天就重新启动计算机(虽然它现在设置为0天只是为了检查脚本是否正在运行,因为我的计算机已经运行了一天……)。

我意识到这不是最优雅的剧本,但我正在努力! :)

 #!/bin/bash up=$(uptime | grep "day" > /home/dnaneet/uptime.foo && awk < /home/dnaneet/uptime.foo '{ print $3 }') [[ $up -gt 0 ]] && xmessage -center "Restart!" 

我已经通过chmod + x checkup.sh使它可执行,当我通过./checkup.sh从终端运行它时它工作正常

我的crontab条目是这个脚本:

46 14 * * * /home/dnaneet/Desktop/./checkup.sh

所以它每天14:46运行…

所以…我认为它应该运行,除非我没有真正愚蠢的东西。 另外,您认为将此bash脚本移动到/bin是否可以?

一心一意:

首先让我们给你一个基于用户的bin文件夹:

 cd ~/ && mkdir bin 

你想使用crontab。 让我们从一些非常简单的事情开始:

 * * * * * touch /tmp/testing.txt 

好的,这样才行

现在让我们尝试运行一个执行相同操作的脚本

 * * * * * /home/username/bin/touchtest.sh 

每分钟运行一次,直到你开始工作
不,你不需要./在行的中间。 ./是为了给你相对的url。
好的,这样才行

现在让我们尝试运行一个调用xmessage的脚本

 * * * * * /home/username/bin/rebootwarn.sh 

不工作

首先,我们需要不依赖于环境变量。 这包括路径设置,x11设置或其他任何内容(想到python和ruby环境变量……)

让我们看起来有点像anacron的正确的cron文件..我把它保存为测试

 #Borrowed from anacron SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin #End borrowed from anacron * * * * * /bin/bash /home/username/bin/test.sh 

设置为每分钟运行一次

crontab test导入它

关于脚本

 #!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin export DISPLAY=:0.0 up=$(uptime | grep "day" > /home/dnaneet/uptime.foo && awk < /home/dnaneet/uptime.foo '{ print $3 }') [[ $up -gt 0 ]] && xmessage -center "Restart!"` 

好的,这样才行......我们做了什么?
我们更改了所有命令,不依赖于我们没有明确设置的路径
我们用bash明确地运行了我们的脚本
我们告诉脚本我们希望在DISPLAY:0.0

该问题已解决,请阅读Google手册:

描述:

  1. 我有脚本使用#!/bin/bash作为标题
  2. 我把脚本放在/home/wc3/palert/

分析:

  1. crontab无法运行我的脚本
  2. 但如果我手动运行它会显示输出,我也可以在我的网站上看到结果
  3. 这意味着crontab无法获得与脚本文件夹上运行脚本时不同的环境

回答:

  1. 使用下面的这一行将您的环境放在脚本上:

     PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/wc3/palert 

    改变这个: /home/wc3/palert
    with:你放脚本的地方,例如/home/budi/script.sh

样品:

 #!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/budi # Script continues... 

尝试将您的脚本放在crontab上。