1.当前有个项目,由于没能找到更好的方式解决这个问题,只能使用Linux的定时任务代替,使用crontab定时执行php文件等。
一般套件服务器配置差不多都安装了crontab服务,所以可以直接使用即可。
如果没有安装,centos可以使用yum安装crontab服务。
安装crontab:
yum install crontabs
1yuminstallcrontabs
说明:
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
4servicecrondstart//启动服务
servicecrondstop//关闭服务
servicecrondrestart//重启服务
servicecrondreload//重新载入配置
查看crontab服务状态:
service crond status
1servicecrondstatus
手动启动crontab服务:
service crond start
1servicecrondstart
查看crontab服务是否已设置为开机启动,执行命令:
ntsysv
1ntsysv
加入开机自动启动:
chkconfig –level 35 crond on
1chkconfig–level35crondon
crontab 配置文件格式 【参考链接:centos中crontab(计时器)用法详解 】
基本格式 :
* * * * * command
分 时 日 月 周 命令
1
2* * * * * command
分 时日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
定时执行我需要的php脚本【由于我这个php文件里面有引入文件,导致不能正常执行,我使用curl请求方式(还有lynx、wget等),如果要提高效率,php去执行本地php文件是最佳选择】
#每分钟远程请求一次目标url
* * * * * root curl -i http://xxx/service/xx.php
1
2#每分钟远程请求一次目标url
*****rootcurl-ihttp://xxx/service/xx.php
以下提供几种写法
#使用PHP程序来调用PHP脚本。
00 * * * * /usr/local/bin/php /home/john/myscript.php
1
2#使用PHP程序来调用PHP脚本。
00****/usr/local/bin/php/home/john/myscript.php
#Lynx文本浏览器访问URL来每小时执行PHP脚本
00 * * * * lynx -dump https://www.xxx.com/script.php
1
2#Lynx文本浏览器访问URL来每小时执行PHP脚本
00****lynx-dumphttps://www.xxx.com/script.php
#使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件
*/10 * * * * /usr/bin/wget -q -O temp.txt https://www.centos.bz/myscript.php
1
2#使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件
*/10****/usr/bin/wget-q-Otemp.txthttps://www.centos.bz/myscript.php
2.crontab文件的一些例子:
#每晚的21:30 重启apache
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#每月1、10、22日的4 : 45重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#每周六、周日的1 : 10重启apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
#每天18 : 00至23 : 00之间每隔30分钟重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
#每星期六的11 : 00 pm重启apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
#晚上11点到早上7点之间,每隔一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
#每一小时重启apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
#每月的4号与每周一到周三的11点重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
#一月一号的4点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
#每半小时同步一下时间
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
20#每晚的21:30 重启apache
3021***/usr/local/etc/rc.d/lighttpdrestart
#每月1、10、22日的4 : 45重启apache
4541,10,22**/usr/local/etc/rc.d/lighttpdrestart
#每周六、周日的1 : 10重启apache
101**6,0/usr/local/etc/rc.d/lighttpdrestart
#每天18 : 00至23 : 00之间每隔30分钟重启apache
0,3018-23***/usr/local/etc/rc.d/lighttpdrestart
#每星期六的11 : 00 pm重启apache
023**6/usr/local/etc/rc.d/lighttpdrestart
#晚上11点到早上7点之间,每隔一小时重启apache
*23-7/1***/usr/local/etc/rc.d/lighttpdrestart
#每一小时重启apache
**/1***/usr/local/etc/rc.d/lighttpdrestart
#每月的4号与每周一到周三的11点重启apache
0114*mon-wed/usr/local/etc/rc.d/lighttpdrestart
#一月一号的4点重启apache
041jan */usr/local/etc/rc.d/lighttpdrestart
#每半小时同步一下时间
*/30****/usr/sbin/ntpdate210.72.145.44
3.如何查看crontab的日志记录
当crontab中的同步任务时而成功,时而不成功,什么原因呢?我们需要通过日志来分析
日志目录文件 【 /var/log/cron】
tail -f /var/log/cron
1tail-f/var/log/cron
4.使用Linux定时任务执行自动化备份数据库
4.1 创建备份脚本【注意,如果使用windows平台创建shell,可能会报错, /sh^M】 {参考链接:http://www.osyunwei.com/archives/714.html}
[
因为操作系统是windows,我在windows下编辑的脚本,所以有可能有不可见字符。
脚本文件是DOS格式的, 即每一行的行尾以\n\r来标识, 其ASCII码分别是0x0D, 0x0A.
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
]
4.2 创建保存备份文件的目录:/home/mysql_back
4.3 创建备份脚本文件: /home/crondshell/mysql_databak.sh
#!/bin/sh
DUMP=/alidata/server/mysql-5.5.40/bin/mysqldump #mysqldump备份文件执行路径
OUT_DIR=/home/mysql_back #备份存放路径
LINUX_USER=root #系统用户名
DB_NAME=xxx #要备份的数据库名字
DB_USER=root #数据库账号 注意:非root用户要用备份参数 --skip-lock-tables,否则可能会报错
DB_PASS=root #数据库密码
DAYS=7 #DAYS=7代表删除7天前的备份,即只保留最近7天的备份
cd $OUT_DIR #进入备份存放目录
DATE=`date +%Y_%m_%d` #获取当前系统时间
OUT_SQL="1yrn_$DATE.sql" #备份数据库的文件名
TAR_SQL="mysqldata_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
$DUMP -u$DB_USER -p$DB_PASS $DB_NAME --default-character-set=utf8 --opt -Q -R --skip-lock-tables> $OUT_SQL #备份
tar -czf $TAR_SQL $OUT_SQL #压缩为.tar.gz格式
rm $OUT_SQL #删除.sql格式的备份文件
chown $LINUX_USER:$LINUX_USER $OUT_DIR/$TAR_SQL #更改备份数据库文件的所有者
find $OUT_DIR -name "mysqldata_bak*" -type f -mtime +$DAYS -exec rm {} \; #删除7天前的备份文件(注意:{} \;中间有空格)
33#!/bin/sh
DUMP=/alidata/server/mysql-5.5.40/bin/mysqldump#mysqldump备份文件执行路径
OUT_DIR=/home/mysql_back#备份存放路径
LINUX_USER=root#系统用户名
DB_NAME=xxx#要备份的数据库名字
DB_USER=root#数据库账号 注意:非root用户要用备份参数 --skip-lock-tables,否则可能会报错
DB_PASS=root#数据库密码
DAYS=7#DAYS=7代表删除7天前的备份,即只保留最近7天的备份
cd$OUT_DIR#进入备份存放目录
DATE=`date+%Y_%m_%d`#获取当前系统时间
OUT_SQL="1yrn_$DATE.sql"#备份数据库的文件名
TAR_SQL="mysqldata_bak_$DATE.tar.gz"#最终保存的数据库备份文件名
$DUMP-u$DB_USER-p$DB_PASS$DB_NAME--default-character-set=utf8--opt-Q-R--skip-lock-tables>$OUT_SQL#备份
tar-czf$TAR_SQL$OUT_SQL#压缩为.tar.gz格式
rm$OUT_SQL#删除.sql格式的备份文件
chown$LINUX_USER:$LINUX_USER$OUT_DIR/$TAR_SQL#更改备份数据库文件的所有者
find$OUT_DIR-name"mysqldata_bak*"-typef-mtime+$DAYS-execrm{}\;#删除7天前的备份文件(注意:{} \;中间有空格)
4.4 修改crontab 添加定时备份脚本任务
vim /etc/crontab
02 17 * * * root /home/crondshell/mysql_databak.sh #表示每天 17点02分进行自动备份
1
2vim/etc/crontab
02 17 * * * root /home/crondshell/mysql_databak.sh #表示每天 17点02分进行自动备份