如何在Linux中在指定的时间运行自定义命令

如何在linux中在指定的时间运行自定义命令
不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统 。由于文件比较大,耗费的时间可能达到小时级别 。这时我们可能就会想能不能在饭空或者休息时间来传输这个文件,这样就出现了我们的定时任务 。
方法1:timeout命令
最常见的方法是使用timeout命令来实现此目的 。
timeout命令是GNU coreutils包的一部分,预先安装在所有GNU / Linux系统中 。
man timeout

如何在Linux中在指定的时间运行自定义命令

文章插图
 
如上图man timeout信息所示:
格式:
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
这里的SUFFIX:
s:秒
m:分钟
h:小时
d:天
案例1:
5秒后执行tail -f /general/Tomcat-8.5-base/logs/catalina.out
timeout 5s tail -f /general/tomcat-8.5-base/logs/catalina.out
这里不是动态图,大家可能看不出效果 。
大家可以自己亲自试一试 。
如何在Linux中在指定的时间运行自定义命令

文章插图
 
方法2:Crontab定时任务
补充:
安装命令:yum install crontabs 。
这里我们仅做简单的介绍和使用,关于crontab更加详细的内容请参考:
Linux中Crontab定时任务简单讲解 。
linux内置的cron进程也可以实现,cron搭配shell脚本,非常复杂指令也no问题 。
(1)Cron介绍:
我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件 。
(2)配置文件:
/var/spool/cron/:
目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名 。
/etc/crontab:
这个文件负责调度各种管理和维护任务 。
/etc/cron.d/:
这个目录用来存放任何要执行的crontab文件或脚本 。
补充:
我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次 。
(3) crontab的使用
格式:
crontab [-u username]
-e:编辑工作表
-l:列出工作表里的命令
-r:删除工作
补充:
省略用户表表示操作当前用户的crontab 。
(4)
我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面 。
每行是一条命令 。crontab的命令构成为时间+动作,其时间有分、时、日、月、周五种,操作符有:
*:取值范围内的所有数字
/:每过多少个数字
-:从X到Z
,:散列数字
借用网上一张crontab格式说明图:
如何在Linux中在指定的时间运行自定义命令

文章插图
 
以下的youCommand代表的是你自己定义的命令 。
案例1:
每1分钟执行一次
* * * * * youCommand
案例2:
每小时的第3和第15分钟执行
3,15 * * * * youCommand
案例3:
在上午8点到11点的第3和第15分钟执行
【如何在Linux中在指定的时间运行自定义命令】3,15 8-11 * * * youCommand
案例4:
每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * youCommand
案例5:
每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 youCommand
案例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
* */1 * * * /etc/init.d/smb restart
案例12:
晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
关于crontab更加详细的内容请参考:
Linux中Crontab定时任务详解 。
欢迎大家给予宝贵的意见或者建议 。
欢迎大家补充或者共享一些其他的方法 。
感谢支持 。




    推荐阅读