问题描述
我有一个脚本,提醒我重新启动计算机,如果uptime
超过,比如3天(虽然现在设置为0天只是为了检查脚本是否正在运行,因为我的计算机已经运行了一天……)。
我意识到这不是最优雅的剧本,但我正在努力! :)
#!/bin/bash
up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')
[[ $up -gt 0 ]] && xmessage -center "Restart!"
我已经通过chmod + x checkup.sh
使它可执行,当我通过./checkup.sh
从终端运行它时工作正常
我的crontab条目是这个脚本:
46 14 * * * /home/username/Desktop/./checkup.sh
所以它每天14:46运行…
所以…我认为它应该运行,除非我没有真正愚蠢的东西。另外,您认为将此bash脚本移至/bin
是否可以?
最佳解决方法
一心一意:
首先让我们给你一个基于用户的bin文件夹:
cd ~/ && mkdir bin
你想使用crontab。让我们从一些非常简单的事情开始:
* * * * * touch /tmp/testing.txt
好的,这样才行
现在让我们尝试运行一个执行相同操作的脚本
* * * * * /home/username/bin/touchtest.sh
每分钟运行一次,直到你运行它没有你不需要./在行中间。 ./适用于您提供相关网址的时间。好的,这样才行
现在让我们尝试运行一个调用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上。