如何在linux中在指定的时间运行自定义命令
不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统。 由于文件比较大,耗费的时间可能达到小时级别。这时我们可能就会想能不能在饭空或者休息时间来传输这个文件,这样就出现了我们的定时任务。
方法1:timeout命令
最常见的方法是使用timeout命令来实现此目的。
timeout命令是GNU coreutils包的一部分,预先安装在所有GNU / Linux系统中。
man timeout
如上图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
这里不是动态图,大家可能看不出效果。
大家可以自己亲自试一试。
方法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格式说明图:
以下的youCommand代表的是你自己定义的命令。
案例1:
每1分钟执行一次
* * * * * youCommand
案例2:
每小时的第3和第15分钟执行
3,15 * * * * youCommand
案例3:
在上午8点到11点的第3和第15分钟执行
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定时任务详解。
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。