Linux笔记--crontab定时任务

自己在编写crontab时遇到了一点坑,花了好久时间,所以记录下来。

定时任务文件位置

/etc/crontab

注意事项:

1.commands命令中,用到的路径最好是全路径噢!

2.最好将要执行的定时任务放到一个.sh文件中,然后在.sh文件的开头添加以下代码。

①首先在控制台执行$PATH,以下是我的结果

bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/usr/local/software/android-sdk/tools:/usr/local/software/android-sdk/platform-tools:/usr/local/software/nodejs/node-v6.11.0-linux-x64/bin

②然后打开你用来存放定时任务的.sh文件,在开头添加

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/usr/local/software/android-sdk/tools:/usr/local/software/android-sdk/platform-tools:/usr/local/software/nodejs/node-v6.11.0-linux-x64/bin

为什么要加这些呢?

因为你可以打开/etc/crontab,查看到最上面的path的值

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

你可以发现,crontab定时任务执行时的PATH只有这么几个目录,而你的定时任务中,很有可能有一些指令,例如:adb,是不在path之内,所有如果直接执行定时任务,就会报错。因此,需要export PATH。(一种方式是直接修改etc/crontab文件中的PATH值;另一种是将定时任务放到脚本文件中,然后在文件的最上方export PATH = 。。。提倡后者噢)

如何查看定时任务出错报告呢?

1.重定向错误信息到指定的文件(推荐)

*/1 * * * * root commond > /root/err.log 2>&1

这里的意思是将指令执行的错误信息,重定向到/root/err.log文件中。

2.启动cron.log文件

网上很多都是通过这种方式,但是,我发现,通过这种方式是看不到具体的出错情况的,只会在出错的时候看到“NoMTAinstalled, discarding output”,个人觉得这种方式并没有用,因为你不能定位你到底哪里出错了。唯一的用处是,可以看到crontab中文件是否变化,重新加载。如果还是想使用这种方式,介绍一下吧。默认情况是没有cron.log文件噢,需要通过一下操作。

1. 修改rsyslog

sudo vim /etc/rsyslog.d/50-default.conf

cron.* /var/log/cron.log #将cron前面的注释符去掉

2.重启rsyslog

sudo service rsyslog restar

    原文作者:我是一只菜鸟呀
    原文地址: https://www.jianshu.com/p/cd6bc0bac9fe
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞