设为首页 收藏本站
查看: 1091|回复: 0

[经验分享] Linux的例行性工作

[复制链接]

尚未签到

发表于 2018-5-25 11:17:49 | 显示全部楼层 |阅读模式
  当你想要在某个时刻点执行某个操作,或者每星期的特定时间执行计划,而自己又怕忘记,这时候就需要用到Linux中的例行性工作了。
  Linux中的任务计划主要分为两种:
  1.一次性的例行性工作
  2.周期性的例行工作
  

  1.一次性的例行性工作
  例如,你想要在11点时,让计算机提醒你该去吃饭了。像这种只需要进行一次的工作,就叫做一次性的例行性工作。这里需要的命令时at。
  at的简单用法,
at time
at>  执行的任务
ctrl + d  以上面说的提醒吃饭为例:
[root@FLyence ~]# tty
/dev/pts/2
[root@FLyence ~]# at 11:00
at> echo -e "\n\033[31mIt's time for lunch.\033[0m" >> /dev/pts/2
at> <EOT>
job 7 at 2013-10-09 11:00[root@FLyence ~]# tty
/dev/pts/2
[root@FLyence ~]# at 11:00
at> echo -e "\n\033[31mIt's time for lunch.\033[0m"
at> <EOT>
job 7 at 2013-10-09 11:00  首先确定要输出到的终端,为/dev/pts/2,at后面加上提醒的时间,在at>后面输入执行的语句,最后按下crtl+D提交任务。
  这里要注意的是,默认情况下执行结果以邮件方式发送给任务发起者。
  再如:在20分钟后关机。
[root@FLyence ~]# at now+20min
at> shutdown -h now
at> <EOT>
job 8 at 2013-10-08 21:27  查看等待中的任务:
  at -l或者atq
[root@FLyence ~]# at -l
7   2013-10-09 11:00 a root
8   2013-10-08 21:27 a root
[root@FLyence ~]# atq
7   2013-10-09 11:00 a root
8   2013-10-08 21:27 a root  删除等待中的任务
  atrm 任务标号 或者 at -d 任务标号
[root@FLyence ~]# atrm 7
[root@FLyence ~]# atq
8   2013-10-08 21:27 a root  

  当然,指定的计划时间除了上面提到的方式外,还可以使用noon, midnight, teatime(4pm)。
  

  同时可以将任务写到文件中,再使用at -f /PATH/TO/AT_SCRIPT TIME命令来调用。
[root@FLyence ~]# echo -e "ls\ncat /etc/passwd" > at
[root@FLyence ~]# cat at
ls
cat /etc/passwd
[root@FLyence ~]# at -f /root/at now+1min
job 10 at 2013-10-08 21:25
[root@FLyence ~]#
You have new mail in /var/spool/mail/root  

  2.周期性的例行性任务
  周期性的例行性工作调度是由cron(crond)这个系统服务来控制的。
  首先来看看crond的配置文件

  1). 系统cron:/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# 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  从这个配置文件中可以看出系统cron中语法分为7段,分钟 小时 日期 月份 周几 用户 命令,各个字段的范围都有说明。
  例如:
3 4 * * * root cat /etc/fstab  每天的4点零3分,以root身份运行cat /etc/fstab,最后结果结果以邮件方式发送到root用户的邮箱。
  下面介绍下通配符:
  *:相应时间点的所有有效取值
  ,: 离散取值, 3,18,33,48 * * * * root cat /etc/fstab
  /: 定义指定取值范围内的频率, 例如:*/3 * * * * root cat /etc/fstab  17 */3 * * * root cat /etc/fstab
  -: 连续取值:17 8-20/3 * * * root cat /etc/fstab
  

  例如:每周二和五的18点零3分,将/etc下面的文件备份到/backup/下
3 18 * * 2,5 root tar -Jcf /backup/etc-`date '+%F'`.tar.xz /etc/*  

  2). 用户级的例行性任务
  用户cron的配置文件定义在/var/spool/cron/USERNAME中。
[root@FLyence ~]# crontab -e  命令:crontab -e,会自动进入该用户的cron配置文件

  例如:6月3日14点20分,执行ls的命令
20 14 3 6 * ls  执行结果将会以邮件的形式放松到该用户的邮箱中。
  这里的语法只有6段,少了一个用户字段。
  用户cron的定义:
  crontab
  -e: 打开cron的编辑页面同vim,会显示语法错误,保存后自动在/var/spoon/cron
  -r: 移除配置文件,会删除所有任务;
  -l: 列出周期性任务
  -u USERNAME,管理员可以替其他用户编写cron:crontab -e -u hadoop
  

  在配置文件中使用的命令的路径是/bin:/sbin:/usr/bin:/usr/sbin,当你用到的命令不在这个路径下的,就无法执行。此时就应该使用绝对路径。如果是在脚本中的时候,自定PATH变量。
  

  由于例行性任务的执行结果默认是发送到用户的邮箱的。要不发邮箱的话,可以定义
  MAILTO=‘’
  

  以秒单位执行任务计划:
  方法1:以30s为周期执行某任务
  * * * * * /usr/bin/unison webdata
  * * * * * sleep 30 && /usr/bin/unison webdata
  

  方法2:以15s为周期执行某任务
  * * * * * for i in 0 1 2; do some_job && sleep 15; done; some_job
  

  注意:使用%时要加反斜线。例如:
  1 2 3 * * touch ~/file_$(date +\%Y\%m\%d).txt
  

  但使用单引号后也可以不再使用反斜线,例如:
  1 2 3 * * touch ~/file_$(date '+%Y%m%d').txt
  

  

  

  补充:batch
  batch 命令被用来在系统平均负载达到 0.8% 以下时执行一次性的任务,用法与at一样
[root@FLyence ~]# batch midnight
//在00:00之后系统平均负载达到0.8%以下的时候执行   
at> sync   
at> sync   
at> shutdown -h now   
at> <EOT>   
job 3 at 2012-12-28 13:20
[root@FLyence ~]# atq   
3       2012-12-28 13:20 b root   
[root@FLyence ~]# atrm 3  

  

  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-480949-1-1.html 上篇帖子: Linux上安装vmware 下篇帖子: linux 内核组成意义
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表