Linux设置定时任务《使用PSSH批量管理Linux》 一文中,已经学习了使用p.sh批量管理linux的技巧 。而很多时候,我们需要定时执行一些任务,或者需要定时执行一些批量任务 。因此,本文就来研究一下linux设置定时任务的方法 。
主要参考 Linux Crontab 定时任务 、 Linux定时任务Crontab命令详解和Linux 定时任务详解。
cron(crond)是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 。linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的 。crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务 。另外,由于使用者自己也可以设置计划任务 , 所以,linux系统也提供了使用者控制计划任务的命令:crontab命令 。
crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表 , 我们可以在以下文件夹内找到相关配置文件 。
linux下的任务调度分为两类 , 系统任务调度和用户任务调度 。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等 。/etc/crontab 文件就是系统任务调度的配置文件 。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等 。用户可以使用 crontab 工具来定制自己的计划任务 。所有用户定义的crontab文件都被保存在/var/spool/cron/crontabs/ 目录中,其文件名与用户名一致 。
假设我们使用的是Ubuntu14.04.5 Server版,查看 /etc/crontab,内容为:
第一行SHELL变量指定了系统要使用哪个shell;第二行PATH变量指定了系统执行 命令的路径 。
接下来的命令格式为:
m h dom mon dow user command
英文全拼为:
minute hour day month week user commond
注意, /var/spool/cron 目录中的用户调度任务,没有user一项,因为文件名已经代表了user 。
在以上各个字段中,还可以使用以下特殊字符:
crontab命令格式为:
crontab [-u username] [file] [ -e | -l | -r ]
设置定时任务和时间紧密相关,如果服务器的时区时间设置和本地不同,就不能保证计划任务的正确执行 。所以使用crontab的第一步,是调节好服务器的时间 。
下面参考 Ubuntu 16.04将系统时间写入到硬件时间BIOS ,对服务器时间进行调节 。
时间是有时区的 , 无论硬件时间还是操作系统时间 。hwclock的时区在/etc/default/rcS文件中设置 , 里面有一个参数UTC,默认值为yes,表示使用UTC时区,如果设置为no,那表示使用osclock的时区 。建议hwclock与osclock设置相同的时区,也就是no 。
1、查看服务器硬件时间
sudo hwclock -r,看到的时间格式为: Wed 23 May 2018 11:02:17 AM HKT -0.031663 seconds
2、查看服务器系统时间
date ,看到的时间格式为: Wed May 23 11:02:41 HKT 2018
3、设置hwclock和osclock时区相同
sudo vim /etc/default/rcS , 找到:
【linux命令mon linux命令行模拟器】 修改为:
4、将系统时间写入硬件时间
sudo hwclock -w
5、修改系统时区
osclock的时区配置文件为/etc/timezone,不建议直接修改配置文件 。
如果你想修改为CST时间,那么执行 sudo tzselect 命令时,选择Asia-China-Beijing Time即可,这时会提示使用Asia/Shanghai时区 。(ubuntu和centos通用)
6、设置即刻生效
执行 date ,发现时区没有变化,依然是HKT 。
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo ntpdate time.windows.com
如果执行ntpdate报错:ntpdate[18409]: no server suitable for synchronization found , 那么就换一个时间同步工具 。
sudo apt-get install rdate
sudo rdate -s time-b.nist.gov
再次执行 date ,发现时区已经变成了CST 。
7、硬件时间同步
sudo hwclock -r ,发现硬件时间落后 。
sudo hwclock -w ,再次把系统时间写入硬件时间,同步完成 。
实例1:每分钟、每小时、每天、每周、每月、每年执行
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
0 * * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
0 23-7/1 * * * /etc/init.d/smb restart
实例13:每月的4号与每周一到周三的11点重启smb
0 11 4 * mon-wed /etc/init.d/smb restart
实例14:一月一号的4点重启smb
0 4 1 jan * /etc/init.d/smb restart
实例15:每小时执行/etc/cron.hourly目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
run-parts这个参数了 , 如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了 。
目标:每分钟查看一下ganglia的状态,并保存到/tmp/log/ganglia目录 。
1、创建/tmp/log/ganglia目录
sudo mkdir -p /tmp/log/ganglia
sudo chmod a w /tmp/log/ganglia
2、编辑crontab
crontab -e ,选择编辑器为vim
3、在crontab文件中添加一行
4、查看crontab任务
crontab -l , 看到任务已经添加成功 。
5、等待了五分钟 , 发现/tmp/log/ganglia目录下啥也没有 。
sudo service cron status ,状态正常 。
sudo /etc/init.d/cron restart , 重启cron试试 。
又等待了五分钟 , 发现/tmp/log/ganglia目录下依然空空 。
莫非是因为pssh没有使用绝对路径? whereis pssh ,找到pssh路径为 /usr/lib/pssh ,修改crontab为:
然而 , 并没有用 。
还是查看下crontab日志吧!
以下主要参考 Ubuntu下用crontab 部署定时任务。
1、编辑50-default.conf
sudo vim /etc/rsyslog.d/50-default.conf
2、把cron前的井号去掉,也就是修改为:
3、重启rsyslog服务
sudo service rsyslog restart
4、重启crontab服务
sudo service cron restart
5、查看crontab日志
less /var/log/cron.log
果然发现了问题:
也就是说 , 命令确实按时执行了,只不过没有执行完,被百分号截断了,导致log文件没有正常生成!
修改crontab为:
终于 , log文件成功生成,nice!但是,文件内容是空的!因为 , /usr/lib/pssh 是一个目录,不是pssh命令!真正的pssh命令是parallel-ssh , 找到它的位置为 /usr/bin/parallel-ssh,修改crontab:
至此,问题圆满解决 。
实际使用的时候,一天获取一次ganglia的状态就够了 , 所以crontab改成:
以上 , 每天执行一次定时任务,抓取ganglia的运行状态保存到日志文件中 。紧接着 , 我们的目标是使用脚本检查当天的日志文件,如果发现ganglia运行异常,则产生一个错误日志 。
1、假设日志文件ganglia-20180524.log的内容为:
2、参考 grep命令最经常使用的功能总结,编写脚本checkganglia.sh
3、执行
chmod a x checkganglia.sh
./checkganglia.sh
如果所有客户机的ganglia运行正常,就会输出All services are runing! 。如果有的客户机ganglia进程不存在,则会在/tmp/log/ganglia/目录下生成当天的错误日志 。
4、设置定时运行
因为日志的检查工作要在日志生成之后,所以时间上延后十分钟 。
上面的脚本,还有很多要改进的地方 。比如有的客户机宕机了,上面的脚本检查不出来 。比如有的客户机ganglia服务没有启动,那么具体是哪几台?针对这两个问题 , 下面进行改进 。假设已经知道客户机的数量为10 。
参考 csplit命令 ,checkganglia.sh脚本修改为:
以上脚本,实现了当客户机数量不为10的时候,进行报错;当客户机ganglia服务没有启动时,进行报错 , 并且筛选出所有没有启动ganglia的客户机 。
本文中,我们先学习了crontab的基础知识和基本用法 。然后通过监控ganglia这一个应用场景来具体学习crontab的详细使用方法,包括查看cron日志的方法 , crontab中命令转义的方法,定时执行脚本的方法,以及审阅日志脚本的编写和进阶 。
至此,还不够完美,因为我们需要每天登录管理机查看有没有错误日志 。下一篇 Linux设置邮件提醒 中,我们将会研究linux设置邮件提醒的方法 。审阅完日志后,如果脚本能够给我们发送一封邮件 , 告知我们审阅的结果 , 那么我们就不必再每天查看错误日志 。
Linux 命令统计日志某个字段的信息如上图,某个服务器的日志文件,通过命令
grep "Send kafka Success" 2021-08-01-info.log | grep "result_size:100"
可以得到相关日志 。现在要求统计所有result_size累加的结果 。
grep "Send kafka Success" 2021-08-01-info.log | grep -o -E "result_size:[0-9] " | awk -F ':' 'BEGIN{print "开始统计result_size累加和"} {sumSize =$2 } END{print "sumSize="sumSize}'
sed 命令可以很好的进行行匹配,但从某一行中精确匹配某些内容,则使用 grep 命令并辅以 -o 和 -E 选项可达到此目的 。其中 -o 表示“only-matching”,即“仅匹配”之意 。光用它不够,配合 -E 选项使用扩展正则表达式则威力巨大 。
比如下面有一条文本 tmp.txt , 其中内容为:
{"aid":45,"path":"attachment/Mon_1112/2_1_5728040df3ab346.jpg"}
我们想从中过略出 aid 的值即 45,那么可以先如下这么做:
grep -o -E 'aid":[1-9]*' tmp.txt
得到的结果为:
aid":45
这时就好办了,我们可以使用 awk 的 -F 选项指示出冒号分隔符,这样就容易过滤出 45 这个值来,整个命令综合如下:
grep -o -E 'aid":[1-9]*' tmp.txt |awk-F: '{print $2}'
参考文档:
MON是什么?mon是一个通用目的地资源监视系统,可以备用于监视网络服务的可用性 , 服务器问题,诸如温度等影响系统运行的环境条件 。资源监视可以被视为两部分独立的任务:测试条件,当出现问题时触发动作 。mon被设计用于检测独立的stand-alone服务并能作出相应的响应动作 。mon以调度器的形式实现监视任务的执行 , 当监视器失效时可以调用响应的告警程序 。我们一般把mon作为集群环境中的资源监控平台 。通过它,我们能够监控几乎所有的已知服务,像http服务、telnet服务、邮件服务等等,甚至能够监视文件的变化 , 实时了解被控主机是否在重启等等 。mon为监视远程主机的系统资源提供了一个良好的平台 。除此之外,mon提供强大的告警机制,也就是在监视到具体的服务失效或者生效时,mon会作出什么放映 。可喜的是,不论是mon的监视工具monitor还是告警程序,都是通过便捷的脚本语言来书写的 。你可以使用shell也可以使用perl或者别的什么 。需要传递的参数借助mon守护进程的变量、系统环境变量以命令行的方式传递给相应的具体脚本程序 。下面是一些mon软件包附带的客户端工具,可以在cgi-bin/ 和clients/ 子目录下找到:-moncmd, 用于客户端的操作工具 , 实现了完整的客户/服务接口 。-monshow,用于报告监视服务的运行状态 , 既有命令行工具也提供了cgi教本 。它可以以友好的、图形化的样式显示服务当前的状态、组信息和错误日志 。-skymon, SKYTEL的双路页面调度接口,允许你查询服务状态,同时提供了和moncmd一致的维护服务的方法 。访问通过简单的用户/密码认证机制和一个访问控制文件进行 。-mon.cgi, mon的web接口,不仅允许你通过web页面查看服务的运行状态,还可以实时的改变服务的相应参数 。监视器和告警程序并不是mon的一部分,尽管附带的发行包中有一些这样的工具 。这就意味着,如果有一个新的服务需要监视或者有修改动作需要响应,mon也无须改动 。这可以保证mon的可扩展性 。mon的特性mon是针对linux开发的工具,但众所周知在sorlaris下他也可以工作 。因为客户和服务端都是由perl语言书写,因此在轻便性上不会有问题 。监控 “监控”这个词是用于检查特定的环境条件 , 以任何形式随时报告服务成功还是失败的消息 。mon的设计非常独立,你可以使用自己喜爱的任何语言书写监控程序,只要按照要求放在mon指定的地方 , 你的监控程序就可以工作 。异步事件通信机制mon服务支持异步事件的通信机制 。这是一个开放式的协议 , 就像monitor和alert脚本一样,你可以触发任何事件 。一个典型的应用就是作为SNMP的陷阱 。远程结点产生的陷阱事件可以采用和监视器池通知失效事件一样的处理方法 。因此很容易就能建立一个分布式的监控体系 。例如,在一个WAN范围内 , 不同域的主机可以收集自身的运行信息,适时地将重大的事件通知位于中心位置的服务器,比如NOC等 。告警 “告警”教本用于在mon检测到问题时,发送消息或者进行失效处理工作 。这些告警脚本和监视脚本一样,也不是mon本身的一部分,而是作为扩展的模块可以随意加入的 。这里也支持"Upalerts",是一种用于当服务失效一段时间随即又恢复正常后所触发的专用脚本程序 。告警管理和失效控制任何受监控服务的失效都会引起告警行为,甚至同一个事件会触发多个告警消息分别到不同的用户 。你可以使用这一特性建立"on call"调度 。例如,你可以设定系统使之一旦发现任何资源不可用的情况,经判断是在早上8点以前,就发送告警消息给所有的系统管理员 , 如果在早上8点以后,只发送给管理员小王 。并行性能够将不同主机或者同组主机上的检测服务工作并行化 。例如 , 限制重复报警mon系统可以限制重复报警的行为 。例如,你可以设定一个持续的失效服务仅没1小时发送一次告警邮件,而不是不停地发送 。你也可以选择 , 忽略那些微小的、短暂的失效事件 。依赖关系mon支持内部服务依赖特性 。例如,当监视服务器和受监视的WWW服务器之间的路由失效时 , 虽然无法访问HTTP服务,但正确的告警消息内容要指出是路由问题而非HTTP问题 。当重要的资源不可访问是,依赖关系也可以防止大量的告警消息发出 。你可以把依赖性理解成为层次结构或者是树结构,当发生一个失效事件时,这种依赖关系可以使失效事件按照树结构的方向将处理任务传递到叶子结点上,也就是说,依赖关系能使告警尽可能的反映失效的真实情况 。然而 , 复杂的依赖关系应该使用生成图来表示,因为实际中你是不会用树结构或者层次结构来描述依赖关系的 。可扩展的配置mon提供了一个伸缩性、扩展性非常强的配置文件机制 。主机可以被规划成组,每个主机或者主机组可以有自己的多个服务(service) 。具体可以参考一下附带的范例文件 。真正的客户/服务模式你可以使用交互命令、WWW界面和SkyTel客户端工具查询服务的状态和历史纪录 。协议很简单,使得你可以很容易添加自己的客户端工具 。Mon支持多种认证方法,包括PAM , 可以实现每个用户的访问控制 。查询服务状态可以使用一个Perl的API模块进行编程 , 所以编写你自己的通信接口也很简单,比如你可以用WAP协议来访问服务状态 。这里要提的是 , 现在有几个社区在发展自己的WWW接口工具 。基于视图的状态报告通过复杂的配置文件 , 用户可以通过服务状态视图查看信息,而不需要了解每一个受监视服务的具体状态 。例如,一个"network"视图显示了整个网络拓扑的情况,而"servers"视图则包括所有有关服务的信息 。如故需要 , 你可以为每个用户配置视图,用户也可以控制他们自己的视图 。允许或禁止实时告警mon可以禁止一个服务失效事件的正常告警行为,直到失效问题被解决才使之有效 。这种状态又叫"ack",可以在客户接口获得(恢复),这样的话用户就能知道支持人员正在解决特殊问题而不必多虑 。它也可以将特定的主机、组或者服务设定为暂时禁止客户端重新使能的状态,而不需要停止或重启服务 。假如你正在升级一个特殊的服务 , 你可以禁止告警功能,当升级完成后你就可以重新使告警有效 。历史记录mon可以保持失效事件、告警触发等行为的历史纪录,以提供用户将来查询 。轻便 Mon是非常轻便的工具,扩展它的服务不需要编写复杂的代码,也无需经历痛苦的编译、链接过程 。因为所有的扩展功能都是模块化的,而且采用纯脚本语言perl编写 。这一点充分保证了Mon体系的轻便简单 。
以上回答你满意么?
Linux里面request mon help作用是什么?request对象的主要功能是服务器端接受客户端以HTTP方式传送给用户端数据,以便对其进一步处理,实现交互设计的功能servlet里的request是http请求 response是http...
请问网上常说的mon是什么意思Mon的中文意思是:星期一(Monday) 。
星期的英文及缩写如下:
星期日:Sunday(Sun.)
星期二:Tuesday(Tues.)
星期三:Wednesday(Wed.)
星期四:Thursday(Thur./Thurs.)
星期五:Friday(Fri.)
星期六:Saturday(Sat.)
历史起源
星期作为时间周期最早起源于巴比伦 。世界各国通用一星期七天的制度最早由罗马皇帝君士坦丁大帝制定,他在公元321年3月7日正式宣布7天为一周,这个制度一直沿用至今 。而在中国,明末清初基督教在中国传播时,星期才逐渐被人们所知晓 。民国时期规定使用公历之后,星期才逐步普及起来 。
linux中mon节点和mgr节点是什么意思linux中mon节点和mgr节点是subdir=$(ls -lt | awk -v mon=$month '$6 == mon{print $NF}') 。
一个 ceph 集群至少要有一个 mon,可以是一三五七等等这样的奇数个. Mgr ( Manager ) :负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率 。
良好的界面:
Linux同时具有字符界面和图形界面 。在字符界面用户可以通过键盘输入相应的指令来进行操作 。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作 。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows 。
可以运行在掌上电脑、机顶盒或游戏机上 。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel64位芯片架构 。同时Linux也支持多处理器技术 。多个处理器同时工作,使系统性能大大提高 。
linux命令mon的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux命令行模拟器、linux命令mon的信息别忘了在本站进行查找喔 。
推荐阅读
- 大仙李信直播素材,李信大神视频
- c语言学生删除系统说明书,c语言中修改删除学生信息
- 胥骄阳用什么拍视频,胥骄阳西瓜视频是真的吗
- word繁体转简,word繁体转简体在哪设置
- c语言返回主程序的函数 c语言返回主程序的函数是什么
- c语言如果一组数中存在某个数字,在c程序中,一个数组的名字实际上是指向该数组
- 游戏飞行战车教案,游戏飞行战车教案小班
- 飞雪主播直播,飞雪现在在哪里直播
- python截取日期函数 python 取日期