Linux 定时任务未执行,手动可以执行成功

排查方向:

 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’`。

posted @   不会游泳的鱼丶  阅读(1254)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示