linux定时任务数据,linux定时任务:crontab

一、crontab介绍

crontab命令用于设置周期性被执行的指令,linux默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

1 检查crond服务是否启动

service crond status

## 停止、启动、重启

service crond stop

service crond start

service crond restart

2 crontab 相关文件介绍

/var/spool/cron/{userName} :存放每个用户的crontab文件。用户运行crontab -e 命令时,就是编辑当前用户的crontab文件,访问该目录需要root权限。

/etc/crontab :代表系统crontab文件。

/var/log/cron :保存cron的任务执行记录,可以通过日志观察crontab执行情况,出错信息等。

/var/spool/mail/{userName} : 记录用户邮件日志(定时任务执行后会发送邮件给配置的用户)。定时任务在终端造成的输出如果没有重定向,会以邮件的形式发送给用户。所以为了防止邮件产生,可以将输出重定向:> /dev/null 2>&1

3 crontab命令选项:

crontab [-u user] file (以文件方式提交定时任务)

crontab [-u user] [ -e | -l | -r ]

-e (edit user’s crontab),编辑用户crontab文件

-l (list user’s crontab),列出用户crontab文件中的cronjob(要执行的定时任务)

-r (delete user’s crontab),删除用户crontab文件(删除定时任务)

-i (prompt before deleting user’s crontab),删除用户crontab前给与相应提示

4 crontab 文件内容格式介绍(配置定时任务)

当用户执行crontab -e 时,将编辑用户crontab文件,文件每一行内容代表一个定时任务,他们都有统一的格式:

* * * * * comand(*以空格或tab隔开)

第一个* : 分钟(0--59)

第二个* : 小时(0--23)

第三个* : 日期(0--31)

第四个* : 月份(1--12)

第五个* : 星期0--7(0或者7表示星期天)

comand : 要执行的操作

Note:

* : 表示任何时候匹配

可以用"A,B,C"表示A或者B或者C时执行命令

可以用“A-B”表示A到B之间时执行命令

可以用“/A”,表示每A分钟(小时、天、月等)执行一次命令

5 举例:

#每晚21:30重启apache

30 21 * * * service httpd restart

#每月1、10、22日的4:45重启apache

45 4 1,10,22 * * service httpd restart

#每月1到10日的4:45重启apache

45 4 1-10 * * service httpd restart

#每隔两分钟重启apache

*/2 * * * * service httpd restart

#每晚11点到早上7点间,每隔1小时重启apache

0 23-7/1 * * * service httpd restart

#每晚18:00至23:00,每隔30分钟重启apache

0,30 18-23 * * * service httpd restart

二、crontab每天备份mysql步骤

1、首先创建数据库备份脚本文件(/mysqlBackup/mysqlBackup.sh),如下:

#!/bin/bash

#根据当前时间生成备份文件名,is ‘(1左边按键) not '

filename=`date +%Y-%m-%d_%H%M%S`

#要备份的数据库

DB_name=数据库名称

#存储备份文件目录

mysql_back_dir="/mysqlBackup/dayBackup"

#存储备份文件的目录不存在则创建

if [ ! -d $mysql_back_dir ]; then

mkdir -p $mysql_back_dir

fi

#执行mysql备份

/usr/bin/mysqldump -u用户名 -p密码 $DB_name --ignore-table $DB_name.mtd03_gps_history --default-character-set utf8 | gzip > $mysql_back_dir/talkback_db_dev_$filename.sql.gz

#删除30天前的备份文件

cd $mysql_back_dir

find . -name '*.sql.gz' -mtime +30 -exec rm -rf {} \;

2、为脚本添加可执行权限

chmod -x mysqlBackup.sh

3、添加任务到crontab定时执行(此处为每天00:00执行)

执行:

crontab -e

输入 :

0 0 */1 * * /mysqlBackup/mysqlBackup.sh

保存并退出,然后通过crontab -l便可查看到刚刚添加的定时任务了,到此,crontab定时备份mysql便设置完成了。

三、可能遇到的问题

1、脚本没有执行?

可能原因:脚本权限问题,或者crontab中的环境变量中找不到当前脚本,脚本最好填写绝对路径。此时可以去通过查看/var/log/cron目录下执行日志,或者将脚本输出重定向查看结果。

2、crontab执行脚本的结果与在shell中执行的不一样?

crontab也可以设定shell环境,包括字符集(字符集不同可能导致你执行命令的结果也不同,比如date命令)、环境变量(环境变量中没有添加你的脚本所在目录,导致脚本的不能被发现)、默认shell等等。

在 shell 脚本开头使用以下代码:

#!/bin/sh

. /etc/profile

. ~/.bash_profile

或者在crontab文件中加入这些配置:

SHELL=/bin/bash

LANG=zh_CN.GB18030

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

MAILTO=""

HOME=/

MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。第五行的HOME变量指定了在执行命令或者脚本时使用的主目录。

3、 '%'在crontab中有特殊含义?

crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date '+%Y%m%d'在crontab里是不会执行的,应该换成date '+\%Y\%m\%d'

4、怎样将crontab文件备份?

# 备份

crontab -l > ~/crontab.bak

# 清空crontab任务

crontab -r

参考:https://www.cnblogs.com/yinz/p/5007123.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值