crontab不执行,提示not found?
本帖最后由 abcfy2 于 2013-05-19 14:09 编辑事情是这样的,我直接把我的定期计划任务写入了/etc/crontab(之前直接用普通账户crontab -e不起作用)
但是诡异的事情发生了,/etc/crontab具体如下:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
#SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow usercommand
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
#每天4:00执行mysql备份并拷贝
0 4 * * * ok988 /home/ok988/mysql_backup/mysql_backup.sh
#每6小时执行磁盘空间监测,超过预警给管理员发邮件
0 */6 * * * ok988 /home/ok988/monitor_disk.sh
我会收到错误的邮件报警,内容如下:
From ok988@iotdemoTue Apr 30 04:00:01 2013
Return-Path: <ok988@iotdemo>
X-Original-To: ok988
Delivered-To: ok988@iotdemo
Received: by iotdemo (Postfix, from userid 1000)
id C30592B034F6; Tue, 30 Apr 2013 04:00:01 +0800 (CST)
From: root@iotdemo (Cron Daemon)
To: ok988@iotdemo
Subject: Cron <ok988@iotdemo> /home/ok988/mysql_backup/mysql_backup.sh
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <HOME=/home/ok988>
X-Cron-Env: <LOGNAME=ok988>
Message-Id: <20130429200001.C30592B034F6@iotdemo>
Date: Tue, 30 Apr 2013 04:00:01 +0800 (CST)
/bin/sh: 1: /home/ok988/mysql_backup/mysql_backup.sh: not found
From ok988@iotdemoTue Apr 30 06:00:02 2013
Return-Path: <ok988@iotdemo>
X-Original-To: ok988
Delivered-To: ok988@iotdemo
Received: by iotdemo (Postfix, from userid 1000)
id 0E0122B034F6; Tue, 30 Apr 2013 06:00:01 +0800 (CST)
From: root@iotdemo (Cron Daemon)
To: ok988@iotdemo
Subject: Cron <ok988@iotdemo> /home/ok988/monitor_disk.sh
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <HOME=/home/ok988>
X-Cron-Env: <LOGNAME=ok988>
Message-Id: <20130429220002.0E0122B034F6@iotdemo>
Date: Tue, 30 Apr 2013 06:00:01 +0800 (CST)
/bin/sh: 1: /home/ok988/monitor_disk.sh: not found
问题解决了,当时安装系统的时候勾选了加密用户主目录,导致crontab认不出来/home/ok988里面的内容了,crontab执行find命令就会发现/home/ok988下的文件都是乱码,所以提示not found。解决方案暂时用的是在家目录之外放置脚本。 最后提示的都是not found,问题是这个脚本确实是真实存在的,手工执行一点问题都没有,把crontab的时间改为* * * * *就可以执行,也没有not found的错误,这是怎么一回事? 感觉不太正常,是连续几天都有问题?
还有
看/var/spool/cron*/cron*/* 你的2个脚本都没有
建议看下/etc/cron* 输出
回复 4# wenhq
日志我看了,有CMD这行,下面也没有报错,说明这条语句是执行了,但是mail中就有报错,提示not found,连续一个月都是这样,每天收工执行一下备份脚本才行 回复 4# wenhq
另外,还有一个更有意思的问题,一直提示not found,我就想看看脚本的输出,最后一行改成了0 */6 * * * ok988 /home/ok988/monitor_disk.sh>>/home/ok988/monitor_disk.log
From ok988@iotdemoWed May1 12:00:01 2013
Return-Path: <ok988@iotdemo>
X-Original-To: ok988
Delivered-To: ok988@iotdemo
Received: by iotdemo (Postfix, from userid 1000)
id CF4392B03314; Wed,1 May 2013 12:00:01 +0800 (CST)
From: root@iotdemo (Cron Daemon)
To: ok988@iotdemo
Subject: Cron <ok988@iotdemo> ~/monitor_disk.sh >> monitor_disk.log
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin>
X-Cron-Env: <HOME=/home/ok988>
X-Cron-Env: <LOGNAME=ok988>
Message-Id: <20130501040001.CF4392B03314@iotdemo>
Date: Wed,1 May 2013 12:00:01 +0800 (CST)
/bin/bash: monitor_disk.log: Permission denied
可以看到执行的用户就是ok988,但是写入log就提示permission denied,这是怎么回事?难道cron不是以当前用户身份执行的命令么?为什么会遭到权限的拒绝? permission denied? 你检查下/home/ok988/monitor_disk.log的权限.
回复 7# wenhq
权限644,属主ok988.ok988。
我在想是不是因为cron执行的时候并不是以当前用户身份去执行了,而是用别的用户(比如daemon这样的低权限执行),这样的话对于/home/ok988来说,根本就没有rx权限,家目录是700权限,别的用户都进不了家目录,所以提示not found??所以会提示permission denied?? more /var/spool/cron/* 回复 9# wenhq ok988@iotdemo:/home$ more /var/spool/cron/*
*** /var/spool/cron/atjobs: directory ***
*** /var/spool/cron/atspool: directory ***
*** /var/spool/cron/crontabs: directory ***