脚本不通过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手册:
描述:
- 我有脚本使用
#!/bin/bash
作为标题 - 我把脚本放在
/home/wc3/palert/
分析:
- crontab无法运行我的脚本
- 但如果我手动运行它会显示输出,我也可以在我的网站上看到结果
- 这意味着crontab无法获得与脚本文件夹上运行脚本时不同的环境
回答:
-
使用下面的这一行将您的环境放在脚本上:
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上。