我不扎根, 我在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不起作用?
答案 0 :(得分:2)
您可以用两种不同的方式修复它。
提供脚本/home/ajain/testscript.sh的完整路径。在这里,您甚至不需要添加bash
,因为您已经明确提到了脚本应在shell
的哪个位置运行,即脚本#!/bin/bash
在执行脚本之前添加此行
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