在午夜运行定时任务,您需要在命令或脚本路径前加上:
0 0 * * *
例如,要运行/home/youssif/myscript
,您可以使用:
0 0 * * /home/youssif/myscript
在你的crontab文件中。
要编辑您的crontab文件,请使用“crontab -e”命令以当前用户身份运行。或者,如果您绝对需要以root身份运行该命令,则可以运行“sudo crontab -e”来编辑您的crontab文件。
在终端中运行命令(如果以root身份运行命令,这不是一个好主意),您需要在命令或脚本中指定要使用的显示器。为此,假设您的$DISPLAY
是:0
(默认值),您可以在命令前加上以下变量:
DISPLAY=:0
此外,通常情况下,在命令执行后终端会自动关闭,但你可以使用xterm的保持选项
来保持终端开启。
因此,要在午夜时分在终端中运行echo "hello world"
命令,你的命令应该是这样的:
0 0 * * DISPLAY=:0 xterm -hold -e 'echo "hello world"'
或者运行你的脚本:
0 0 * * DISPLAY=:0 xterm -hold -e '/home/youssif/myscript'
然而,检查cron作业的标准方法是将终端输出重定向到一个文件中,以便稍后查看。
例如,要将终端输出重定向到文件
/home/youssif/helloworld.log
,您可以在crontab文件中使用以下行:
0 0 * * echo "hello world" > /home/youssif/helloworld.log
或者,您还可以使用
tee
命令来重定向输出,就像这样:
0 0 * * echo "hello world" | tee /home/youssif/helloworld.log
最后,您可以使用
cat
命令查看文件的内容:
cat /home/youssif/helloworld.log
这样,命令可以在后台运行,但您仍然可以检查输出。
为了根据已运行任务的结果禁用/启用任务,我认为这更适合提出一个单独的问题。我相信你的答案会涉及在Bash脚本中使用“if then else”语句。
编辑:
正如 @Tcooper 指出的那样,我们必须添加
2>&1
来重定向所有输出,包括错误消息,所以你可能想使用类似这样的代码。
0 0 * * echo "hello world" 2>&1 > /home/youssif/helloworld.log
或者
0 0 * * echo "hello world" 2>&1 | tee /home/youssif/helloworld.log
0 0 * * *
。例如,要运行/home/youssif/myscript
,你需要在crontab文件中使用0 0 * * /home/youssif/myscript
。要编辑你的crontab文件,请使用crontab -e
以当前用户身份运行该命令。或者,如果你绝对需要以root身份运行该命令,可以运行sudo crontab -e
来编辑你的crontab文件。 - mchid