当前位置: 首页>>技术问答>>正文


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

,

问题描述

我有一个脚本,提醒我重新启动计算机,如果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手册:

描述:

  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上。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1888.html,未经允许,请勿转载。