crontab 定时任务

日常操作
Article Directory
crontab 定时任务的设置

crontab 用法

最近有点懒,好多东西用到了以为能记住,就没写下来。再用到发现又想不起来了。

crontab是用来定期执行程序的命令

##命令用法
crontab [ -u user ] file
其实这个相当于你把本应该写在 /var/spool/cron/[user] 里面的任务,单独写在一个file里面,然后,运行这个命令会吧文件里面的东西添加进去。等于直接编辑 /var/spool/cron/[user]这个文件。

当然,更简单的方法,crontab -e 将会编辑当前用户的计划任务。

##文件的写法
可参考 /etc/crontab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# /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
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 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
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 )
#

由上面的说明我们可以看出来,计划任务的常规写法是

1
2
3
4
5
6
7
8
9

* * * * * [command]
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

###进阶写法

1
2
3
4
5
6
7
8
9
@reboot Run once, at startup.
@yearly Run once a year, “0 0 1 1 *”.
@annually (same as @yearly)
@monthly Run once a month, “0 0 1 * *”.
@weekly Run once a week, “0 0 * * 0”.
@daily Run once a day, “0 0 * * *”.
@midnight (same as @daily)
@hourly Run once an hour, “0 * * * *”.

示例

1
0 1-12/2 * * * /usr/bin/backup #每天的024681012点进行运行一次 /usr/bin/backup

##说明
*/n 时表示每 n 个对应单位时间间隔执行一次,
a-b 时表示a-b对应单位时间内都要执行,

##特别注意
crontab 和写 service 文件时一样
很多时候环境变量并未加载,所以可能无法识别一些命令,所以需要自己用 export 导入环境变量,文件路径也需要全部使用绝对路径.。
例如,你在需要启动一个java项目的时候,很可能就不存在jre或jdk的路径的环境变量,所以此时,在运行java项目之前,你需要

1
2
export JAVA_HOME=/opt/jdk_path
export PATH=JAVA_HOME/bin:/bin/sbin:/usr/bin:/usr/sbin

然后再运行JAVA项目
##其他说明
在任务执行之后,系统会给用户发送电子邮件,通知你任务已经执行。如果你不想收到这样的邮件(我猜你并不想频繁收到邮件通知)可在命令后添加 > /dev/null 2>&1 将输出重定向就好了。

如果你的命令或脚本有输出并且你想吧输出记录到文件,那么可以这样写

1
2
0 5 * * *  /bin/ls >> /root/ls.log 2>&1

所有输出都会被记录在 /root/ls.log 文件里面

##完
好了,自动任务就配置好了。
唉,吆去学校了,好紧张。最近做这个花了太多时间。没有准备数学考试

Author: 哒琳

Permalink: http://blog.jieis.cn/2020/82b10887-bcba-4689-8bb8-35a7180a4df9.html

Comments