排查方向:
1.crond服务未启动
打开方法 crond
或 service crond start
2.权限问题 查看是否有执行权限
3.路径问题 crontab 要写绝对路径
4.时差问题 服务器客户端出现时差问题 ,以服务器为准
5.变量问题
6.自己补充 脚本执行最好在加一个cd 到当前脚本执行目录(我的是没有CD当前目录,手动可以执行脚本,无法定时执行)
一、crontab未执行
crontab里面设置定时任务如下:
1 19 * * * /usr/bin/python3 /home/nola/a.py > /home/nola/logs/a_logs_$(date).log 2>&1
问题:存放log日志的logs目录没有权限,更改logs目录为777权限
二、crontab未按当前日期生成日志文件
date显示的时间格式如下:
生成日志文件为:a_logs_2019年 09月 02日 星期一 19:37:01 CST.log
因此自定义时间格式,crontab设置为:
1 19 * * * /usr/bin/python3 /home/nola/a.py > /home/nola/logs/a_logs_$(date "+ %Y-%m-%d %H:%M:%S").log 2>&1
还是不能正确生成指定格式日志,crontab正确写法如下:
1 19 * * * /usr/bin/python3 /home/nola/a.py > /home/nola/logs/a_logs_$(date "+\%Y-\%m-\%d \%H:\%M:\%S").log 2>&1
注意细节:
1. date 后面+与%之间是没有空格隔开的,不同与python编写代码规范
2. %Y-%m-%d %H:%M:%S 中%前面都需要加上
针对Linux系统的查询方法(含Redhat、SUSE)
看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察
配图为系统aix root用户默认的crontab
转载于:https://www.cnblogs.com/NolaLi/p/11451596.html
内容补充
2. crontab与环境变量
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
也可以在脚本加入(环境变量)
#bin/bash
. /etc/profile
. ~/.bash_profile
3. 其他应该注意的问题
1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。