首页 > 代码库 > SHELLl脚本在crontab中不能正确运行

SHELLl脚本在crontab中不能正确运行

    某个脚本手工运行可以产生正确输出,而放在定时任务crontab中却有问题。


解决思路:

    1、一般的crontab都会生产mail邮件(如果没有在crotab里面删掉末尾的">>/dev/null"),使用mail命令看看crontab产生的消息,定位一下具体出了什么问题,我看到的报错就是:

Message 49:
From root@lvs2.localdomain  Tue Sep 23 19:56:02 2014
Return-Path: <root@lvs2.localdomain>
X-Original-To: root
Delivered-To: root@lvs2.localdomain
From: root@lvs2.localdomain (Cron Daemon)
To: root@lvs2.localdomain
Subject: Cron <root@lvs2> /bin/bash /root/collect_log.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Tue, 23 Sep 2014 19:56:02 -0700 (PDT)
Status: RO

/root/collect_log.sh: line 20: ifconfig: command not found
/root/collect_log.sh: line 20: ifconfig: command not found
/root/collect_log.sh: line 20: ifconfig: command not found
/root/collect_log.sh: line 20: ifconfig: command not found
/root/collect_log.sh: line 20: ifconfig: command not found

    2、由此很清晰看到是ifconfig没有正确执行,很明显系统不可能没有这个命令,应该是没找到正确路径的问题,这是因为crontab执行时调用的是/etc/crontab文件中的配置,查看一下:

[root@lvs2 ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

* * * * * ls
* * * * * ls -e -

。。。好吧,PATH是对的,貌似这个配置有点坑爹,但是不管怎样,对照了当前home目录下.bashrc的内容,发现是直接调用的/etc/下的profile和bashrc,先在脚本中加上:

source /etc/profile
source /etc/bashrc

如果还有其他特定配置文件也都加载下。这下计划任务执行就OK了。


    3、其他的一些错误大多是crontab编写格式错误,或者是脚本权限不对,好好检查下就没啥事了,为了平台的通用性,最好还是多写绝对路径,少用相对路径。最后记得在crontab的任务末尾加上>>/dev/null 2>1&,避免太多输出占满空间。

本文出自 “hiubuntu” 博客,请务必保留此出处http://qujunorz.blog.51cto.com/6378776/1557641

SHELLl脚本在crontab中不能正确运行