脚本不通过 crontab 运行,但独立工作正常

dea*_*arN 68 cron

我有一个脚本,如果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!"
Run Code Online (Sandbox Code Playgroud)

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

我的这个脚本的 crontab 条目是:

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

所以它每天 14:46 运行......

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

Rob*_*ans 80

一心一意:

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

cd ~/ && mkdir bin
Run Code Online (Sandbox Code Playgroud)

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

* * * * * touch /tmp/testing.txt
Run Code Online (Sandbox Code Playgroud)

好的,这样就可以了

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

* * * * * /home/username/bin/touchtest.sh
Run Code Online (Sandbox Code Playgroud)

每分钟运行一次,直到你让它工作
不,你不需要在行的中间有一个 ./ 。./ 用于提供相对网址。
好的,这样就可以了

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

* * * * * /home/username/bin/rebootwarn.sh
Run Code Online (Sandbox Code Playgroud)

不工作

首先我们不需要依赖环境变量。这包括路径设置、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
Run Code Online (Sandbox Code Playgroud)

设置为每分钟运行一次

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!"`
Run Code Online (Sandbox Code Playgroud)

好的,这样就可以了……我们做了什么?
我们更改了所有命令,使其不依赖于我们没有明确设置的路径我们
使用 bash 显式运行我们的脚本
我们告诉脚本我们希望在 DISPLAY :0.0

  • 我喜欢你一步一步地经历这个然后总结它的方式——谢谢! (3认同)
  • 感谢你的回答。你说“让我们让我们的看起来有点像 anacron 的正确 cron 文件..我将其保存为测试”..我们的什么?crontab 文件?`:-/` (2认同)

小智 16

问题解决了阅读谷歌的手册:

描述:

  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
    
    Run Code Online (Sandbox Code Playgroud)

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

样本:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/budi
# Script continues...
Run Code Online (Sandbox Code Playgroud)

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