Crontab没有给出结果

时间:2018-06-21 08:18:42

标签: linux bash cron sh

我不扎根, 我在crontab中输入了以下命令:

*/1 * * * * /home/ajain/testscript.sh

文件testscript.sh具有以下命令:

#!/bin/bash
echo "The script begins now"
ping -c 2 live.com
echo The script has been run on `date` >> /home/ajain/testscript.log
echo "The script ends now"
exit

crontab没有给出结果,但是,以下命令在testscript.log文件中正确给出了结果,并显示了ping日期。

bash testscript.sh

为什么crontab不起作用?

3 个答案:

答案 0 :(得分:2)

您可以用两种不同的方式修复它。

  1. 提供脚本/home/ajain/testscript.sh的完整路径。在这里,您甚至不需要添加bash,因为您已经明确提到了脚本应在shell的哪个位置运行,即脚本#!/bin/bash

  2. 的第一行
  3. 在执行脚本之前添加此行

     set path=$path:/home/ajain/
    
     testscript.sh # no need to use bash in front of it
    

仅提供脚本执行权限还不够。您需要检查将要执行脚本的用户是否具有脚本位置的权限。这意味着用户是否可以执行cd /home/ajain/

希望这会对您有所帮助。

答案 1 :(得分:0)

您需要定义脚本输出。

由于cron手册页:

  

执行命令时,任何输出都会邮寄给   crontab(或在MAILTO环境变量中命名的用户   crontab(如果存在)。孩子们的cron跑步   如将看到的,这些进程的名称被强制为大写。   在syslog和ps输出中。

echo The script has been run on 'date' >> /home/ajain/testscript.log以外的所有其他内容,您应该检查您/ root的邮件或syslog(例如/ var / log / syslog)。

我建议做这样的事情:

*/1 * * * * /home/ajain/testscript.sh >> /home/ajain/script.log

@编辑

我的用户的crontab文件:

$crontab -l
# test
*/1 * * * * /home/3sky/tests/test.sh >> /home/3sky/tests/log.log

脚本如下:

#!/bin/bash
echo "The script begins now"
ping -c 2 live.com
echo The script has been run on `date`
echo "The script ends now"
exit

文件权限:

test.sh - 0755/-rwxr-xr-x
log.log - 0644/-rw-r--r--

日志文件中的输出:

$tail -20 log.log
2 packets transmitted, 0 received, 100% packet loss, time 10999ms

The script has been run on Thu Jun 21 12:18:12 CEST 2018
The script ends now
The script begins now
PING live.com (204.79.197.212) 56(84) bytes of data.

--- live.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 10999ms

The script has been run on Thu Jun 21 12:19:12 CEST 2018
The script ends now
The script begins now
PING live.com (204.79.197.212) 56(84) bytes of data.

--- live.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 10999ms

The script has been run on Thu Jun 21 12:20:12 CEST 2018
The script ends now

答案 2 :(得分:0)

删除>> /home/ajain/script.log,只需在文件/home/ajain/testscript.sh的顶部添加一行:

#!/bin/bash

exec >> /home/ajain/script.log 2>&1

echo "The script begins now"
ping -c 2 live.com
echo "The script has been run on `date`"
echo "The script ends now"
exit

只需使用以下命令即可从crontab中删除>> /home/ajain/script.log

*/1 * * * * /home/ajain/testscript.sh