系统定时任务
Tofloor
poster avatar
老陌
deepin
2018-09-03 05:23
Author
本帖最后由 myccloves 于 2019-7-31 22:39 编辑

定时任务就是设定一个时间,时间到了会执行指定的任务。比如:每天零点执行备份任务。

一、crond服务
我们查看/etc/init.d里面有crond服务,这个就是定时服务。

我在deepin系统中查看/etc/init.d目录中有cron服务,在/lib/systemd/system中有cron.service服务文件,但这个没有d,所以说不同发行版本有差异。 d表示daemon,后台守护进程的意思。

在cenos中默认已经安装:

  1. [linux@centos ~]$ chkconfig --list | grep crond
  2. crond                  0:off        1:off        2:on        3:on        4:on        5:on        6:off
Copy the Code

发现在2345级别已经自动开启。

在deepin中默认已经安装:
  1. laomo@myccloves:~$ systemctl list-unit-files  --type=service | grep cron
  2. cron.service                               enabled  
Copy the Code

发现开机已经默认启动。

如果没有自启动,可以设置一下:

  1. chkconfig crond on #centos6
  2. systemctl enable cron.service  #deepin,centos7等
Copy the Code


二、crontab 命令
  1. crontab [选项]
Copy the Code

选项:

  • -e 编辑crontab定时任务
  • -l 查看crontab任务
  • -r 删除当前用户所有的crontab任务


crontab定时格式:

  1. 由五个星加命令组成: * * * * * 命令
Copy the Code

五个星表示:分钟(0-59), 小时(0-23), 日期(1-31), 月份 (1-12), 周(1-7)

周里面也可以是0,0和7表示星期日。

说明:

  1. 45 22 * * *  cmd
Copy the Code

表示每天22时45分执行cmd命令,* 号表示单位时间,如:每分,每时,每天,每月,每周。
如果全是 * 号,表示每分钟执行一次cmd命令。

  1. 0 17 * * 1 cmd
Copy the Code

表示每周1的17时0分,执行cmd命令

  1. 0 5 1,15 * * cmd
Copy the Code

逗号表示这个时间的多段时间。 这里表示每月的1号,15号的5时0分执行cmd命令

  1. 40 4 * * 1-5 cmd
Copy the Code

-表示这个时间的范围。 这里表示每周的周一至周五,4时40分执行cmd命令

  1. */10 4 * * * cmd
Copy the Code

/表示每隔多久执行一次,此例中表示每天的零晨4点,每隔10分钟执行一次cmd命令

注意:定时任务最小单位是分钟,至少1分钟才能执行一次任务。

Example:

  1. crontab -e
  2. 10 20 * * * /bin/ls / > /tmp/1.txt
Copy the Code

每天的20时10分,显示根目录的内容,写到/tmp/1.txt文件中。
注意:这里的路径用绝对路径。

  1. laomo@myccloves:~$ crontab -l
  2. 10 20 * * * /bin/ls / > /tmp/1.txt
Copy the Code

查看定时任务


三、实例

我的博客在单位的电脑,学习了定时任务,我就可以设置每天的某个时间自动备份到我的电脑里。

这里采用sshfs远程挂载,之后复制。

1. 编写备份脚本:
  1. vim /usr/bin/blogbk.sh

  2. #!/bin/bash
  3. #filename:blogbk.sh
  4. #备份我的数据

  5. port=*
  6. password=*
  7. hostpath=*

  8. log='/mnt/linuxdata/laomo/blog/bk.log'

  9. #把当前日期写到日志中,表示什么时候备份的
  10. date=$(date)
  11. echo "" >> $log
  12. echo $date >> $log

  13. #连接到远程服务器
  14. sshfs -p $port -o ssh_command="sshpass -p $password ssh" -o allow_other $hostpath /mnt/linuxnet

  15. if [ $? -eq 0 ]; then
  16.         #开始备份
  17.         cp --update -rvp /mnt/linuxnet/mnt/data/web/apache-tomcat-9.0.11/webapps/linux/* /mnt/linuxdata/laomo/blog/linux/ >> $log
  18.         cp --update -rvp /mnt/linuxnet/mnt/data/web/db/* /mnt/linuxdata/laomo/blog/db/ >> $log

  19.         #备份完成,卸载挂载点
  20.         umount /mnt/linuxnet
  21. else
  22.         echo "连接服务器失败" >> $log

  23. fi
Copy the Code

2. 设置定时任务
  1. crontab -e
  2. 30 20 * * * /usr/bin/blogbk.sh
Copy the Code

注意:定时任务中的date,如果需要用%y%m%d定义自己的日期格式,必须进行转议,%在crontab中有特殊的意义,所以应该用:
  1. date=$(date +\%Y\%m\%d)
Copy the Code

3. 查看日志,了解备份情况



先定时执行一次。

之后修改连接配置,故意让其连不上服务器(表示服务器关机),手动执行一次。 通过日志可以了解是否备份成功。

老陌再也不用为忘记备份博客而发愁了。






Reply Favorite View the author
All Replies
avatar
许自强
deepin
2018-09-03 06:26
#1
赞,这个不错
Reply View the author
avatar
47******76@qq.com
deepin
2018-09-03 07:12
#2
哇塞,好厉害,赞赞赞
Reply View the author
avatar
老陌
deepin
2018-09-03 13:45
#3
https://bbs.deepin.org/post/168348
哇塞,好厉害,赞赞赞

学习笔记。革命尚未成功,还需继续努力。
Reply View the author
avatar
老陌
deepin
2018-09-03 13:46
#4

谢谢支持,学习笔记。呵呵。
Reply View the author
avatar
窄口牛
deepin
2018-09-03 14:54
#5
已收藏,谢谢分享
Reply View the author
avatar
qq420100523
deepin
2018-09-03 18:00
#6
很好的资料,收藏
Reply View the author
avatar
中国新蔡
deepin
2018-09-03 19:23
#7
本帖最后由 xiaoxie 于 2018-9-3 11:24 编辑

,哈哈,老陌太厉害了,向你学习!
建议最好不要直接这么写后面的命令,可以参考这样来写,

30 20 * * * /bin/bash /usr/bin/blogbk.sh >&/dev/null
因为有时候,定时任务是执行环境和你测试的环境可能不一样,会导致失败,加上后面的是不需要老实不停的发邮件给用户,防止系统空间被占满!哈哈
Reply View the author
avatar
老陌
deepin
2018-09-03 20:17
#8
https://bbs.deepin.org/post/168348
,哈哈,老陌太厉害了,向你学习!
建议最好不要直接这么写后面的命令,可以参考这样来写,

谢谢。~~~
Reply View the author
avatar
impressionyang
deepin
2018-09-03 20:55
#9
行啊,老陌你可是活的越来越年轻了(是指心态啦),接受deepin系统不仅快,现在连简单的shell脚本都玩得挺溜了,继续加油啊!
Reply View the author
avatar
tmacy
deepin
2018-09-03 21:42
#10
现在用systemd的timer服务会比较简单,有空可以研究一下!

https://zybuluo.com/Tmacy/note/384049

Reply View the author
avatar
老陌
deepin
2018-09-03 22:39
#11
https://bbs.deepin.org/post/168348
现在用systemd的timer服务会比较简单,有空可以研究一下!

https://zybuluo.com/Tmacy/note/384049

好的,有时间学习一下。
Reply View the author
avatar
老陌
deepin
2018-09-03 22:39
#12
https://bbs.deepin.org/post/168348
行啊,老陌你可是活的越来越年轻了(是指心态啦),接受deepin系统不仅快,现在连简单的shell脚本都玩得挺 ...

越来越年轻,这话我愿意听,哈哈。
Reply View the author
avatar
tmacy
deepin
2018-09-04 03:31
#13
https://bbs.deepin.org/post/168348
越来越年轻,这话我愿意听,哈哈。

老陌是做啥的?看博客很多学习笔记哦,确实积累的不少内容!
Reply View the author
avatar
7***1@qq.com
deepin
2018-09-04 04:07
#14
厉害了,陌哥以后向你学习
Reply View the author
avatar
老陌
deepin
2018-09-04 05:22
#15
https://bbs.deepin.org/post/168348
老陌是做啥的?看博客很多学习笔记哦,确实积累的不少内容!

不做计算机的,文职。

边学边忘,前面忘记的差不多了。今天晚上把博客搞坏了,好在有备份,才恢复成功。
Reply View the author
avatar
老陌
deepin
2018-09-04 05:22
#16
https://bbs.deepin.org/post/168348
厉害了,陌哥以后向你学习

不敢当, 我是菜鸟。
Reply View the author
avatar
mrli_deep
deepin
2018-09-04 05:29
#17
流皮,晚辈拜服
Reply View the author
avatar
impressionyang
deepin
2018-09-05 06:09
#18
https://bbs.deepin.org/post/168348
不敢当, 我是菜鸟。

我们一直在菜鸟的边缘徘徊2333
Reply View the author
avatar
weijiahao
deepin
2020-03-18 00:35
#19
哥们,单一时刻执行一次任务,怎么弄,我看见书上有at命令,但是好像deepin没有
Reply View the author