指点成金-最美分享吧

登录

linux的计划任务可以设定成每30秒钟执行命令一次么?就是 crontab -e 这个命令之后应该怎么写?

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了linux的计划任务可以设定成每30秒钟执行命令一次么?就是 crontab -e 这个命令之后应该怎么写?相关的知识,希望对你有一定的参考价值。

1、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。

2、在linux命令行下输入shell指令:crontab -e,进入crontab编辑状态。

3、通过2条每分钟执行的定时任务配合 sleep 30;指令,此时会看到定时任务成功实现了30秒执行一次。

参考技术A cron执行任务的最小时间间隔是1分钟。 要实现30秒一次的任务, 可以自己写脚本
while:
do
你的任务
sleep 30

done追问

就是说 写成 * * * * * root run-parts /etc/cron.min 这样?

追答

这样写, 就是1分钟一次,我是指5个*。 后面的命令对不对我就不清楚了。
要实现这个目标, 不能用cron, 忘掉cron! 把这段脚本保存成every30sec.sh
添加执行权限
./every30sec.sh& 后台运行就完事了。

追问

呃 高手!!!不过..老说留的作业就是说让我用 linux的计划任务也就是 cron 执行这个命令...

追答

难道这样?
script.sh 这样写
执行任务
sleep 30
执行任务

然后crontab -e
* * * * * /path/to/script.sh

本回答被提问者和网友采纳
参考技术B crontab中放两个就能30秒执行一次了
* * * * * sleep 30; /home/xx/xx.sh
* * * * * sleep 00; /home/xx/xx.sh
参考技术C crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。

所以不能精确到秒.追问

可这是老师留的作业啊..

参考技术D crontab -e
*/0.5 * * * * /home/xx/xx.sh

Linux系统计划任务

crond计划任务

一 定时任务介绍

1、什么是定时任务?

设定某个日期或时间周期性执行指令。比如设定一个闹铃,叫你每天早上7点钟起床等,这就是一个定时任务。

2、什么是Crond?

Crond是Linux系统中用来定期执行命令或脚本的一种服务软件,一般情况下,我们安装完CentOS操作系统之后,默认便会启动Crond任务调度服务。 Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个Crond定时任务服务就相当于我们平时早起使用的闹钟一样。

3、crond日志文件

​ /var/log/cron

4.、为什么要使用定时任务?

​ 定期备份数据,定期执行脚本程序

​ 我们举个例子说明:例如,我们的数据库或者代码程序需要每天晚上0点做一次备份,这样每天夜里都需要执行的周期性工作,如果要让人操作的话,就得每天半夜爬起来,然后登录系统执行任务,执行完接着睡觉。另外,执行任务的过程也可能持续几个小时,这样一来,一个晚上我们就都不用睡觉了,这样显然是不行的。那么有什么办法来解决这个周期性的执行任务需求呢?

​ 这就是Linux系统的定时任务Crond,这相当于我们平时生活中的闹钟功能,每天晚上提前设置定时,早晨按时叫醒你。

5、 定时任务主要分为以下两种使用情况。

​ (1)系统级别的定时任务:
​ 临时文件清理例/tmp和/var/tmp等、系统信息采集、日志文件切割

​ (2)用户级别的定时任务:
​ 定时向互联网同步时间、定时备份系统配置文件、定时备份数据库的数据

二 定时任务管理

2.1 系统级计划任务

定义方式一:编辑文件/etc/crontab

[root@localhost ~]# vim /etc/crontab [root@localhost ~]# cat /etc/crontab SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# 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分钟小时日月周

定义方式二:把脚本放到该目录下

/etc/cron.hourly/ # 系统定时任务每个小时运行这个目录里的内容/etc/cron.daily/ # 系统定时任务每天运行这个目录里的内容/etc/cron.weekly/ # 系统定时任务每周运行这个目录里的内容/etc/cron.monthly/ # 系统定时任务每月运行这个目录里的内容

2.2 用户级计划任务

[root@localhost ~]# crontab -e# 创建计划任务* * * * * /bin/ls[root@localhost ~]# crontab -l# 查看计划任务* * * * * /bin/ls[root@localhost ~]# ls /var/spool/cron/root[root@localhost ~]# cat /var/spool/cron/root  # 都是写在这里呢* * * * * /bin/ls[root@localhost ~]# tail /var/log/cron    # 查看日志[root@localhost ~]# crontab -u egon -e# /etc/cron.deny 是定时任务的黑名单,使用root将需要拒绝的用户加入/etc/cron.deny[root@localhost ~]# echo "egon" >> /etc/cron.deny [root@localhost ~]# su - egon  # 登陆该普通用户,无法编写定时任务上一次登录:四 813 19:44:10 CST 2020pts/1[egon@localhost ~]$ crontab -eYou (egon) are not allowed to use this program (crontab)See crontab(1) for more information

2.3 计划任务语法格式

crond是按照分钟进行计算的,不支持秒

* 表示任意的(分、时、日、月、周)时间都执行- 表示一个时间范围段,5-7, 表示分隔时段,6,0,4表示周六、日、四/1 表示每隔n单位时间,*/1010分钟

了解定时任务crontab的编写规范。

00 02 * * * #每天的凌晨2点整执行00 02 1 * * #每月的1日的凌晨2点整执行00 02 14 2 * #每年的2月14日凌晨2点执行00 02 * * 7 #每周天的凌晨2点整执行00 02 * 6 5 #每年的6月周五凌晨2点执行00 02 14 * 7 #每月14日或每周日的凌晨2点都执行00 02 14 2 7 #每年的2月14日或每年2月的周天的凌晨2点执行*/10 02 * * * #每天凌晨2点,每隔10分钟执行一次* * * * * #每分钟都执行00 00 14 2 * #每年2月14日的凌晨执行命令*/5 * * * * #每隔5分钟执行一次00 02 * 1,5,8 * #每年的1月5月8月凌晨2点执行00 02 1-8 * * #每月1号到8号凌晨2点执行00 21 * * * #每天晚上21:00执行45 4 1,10,22 * * #每月1、10、22日的4:45执行45 4 1-10 * * #每月1到10日的4:45执行3,15 8-11 */2 * * #每隔两天的上午8点到11点的第3和第15分钟执行0 23-7/2 * * * #晚上11点到早上7点之间,每隔两小时执行15 21 * * 1-5 #周一到周五每天晚上21:15执行

2.4 示例

示例1

[root@localhost ~]# cd /test/[root@localhost test]# cat 1.sh #!/bin/bash echo "111" >> /tmp/access.log[root@localhost test]# cat 2.sh #!/bin/bash echo "222" >> /tmp/access.log[root@localhost test]# cat 3.sh #!/bin/bash echo "333" >> /tmp/access.log[root@localhost test]# chmod o+x *[root@localhost test]# vim /etc/crontab *  *  *  *  * egon run-parts /test[root@localhost ~]# tail -f /var/spool/mail/root # 查看邮件[root@localhost ~]# tail -f /var/log/cron  # 查看计划任务执行情况

示例2:命令最好用绝对路径

[root@localhost test]# crontab -e[root@localhost test]# crontab -l*  *  *  *  * ntpdate ntp.aliyun.com您在 /var/spool/mail/root 中有邮件[root@localhost test]# cat /var/spool/mail/root  | tail -3/bin/sh: ntpdate: 未找到命令        [root@localhost ~]# crontab -l  # 重新修改* * * * * /usr/sbin/ntpdate ntp.aliyun.com

注意:每执行一次计划任务就会记录日志到/var/log/cron,会导致文件过大,可以关闭邮件服务

[root@localhost test]# systemctl stop postfix.service

邮件服务停止之后,在/var/spool/postfix/maildrop/目录下,会生成很多的小文件,定时任务执行一次,目录就会生成一个文件,日积月累的话,磁盘的inode会被沾满,导致磁盘故障,重新编写定时任务

[root@localhost ~]# crontab -l* * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null

总结:

  • 1、查看cron服务是否起作用:

    如果我们要查看定时任务是否准时调用了可以/var/log/cron中的运行信息

    cat /var/log/cron

    也可以用tail -f /var/spool/mail/用户名,来查看普通用户的计划任务执行情况

    此处需要记住两点:

    (1):cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。**

    (2):crontab的用户手册中推荐每一个命令使用绝对路径,例如调用rm命令时写作:/bin/rm,这是为了防止由于每一个用户的PATH环境变量不同而导致命令无法找到的错误。

  • 2、编写定时任务时,先在命令行上面执行一次,查看是否可以执行成功。

  • 3、把定时任务执行的结果定向到空,如果不定向到空的话,邮件服务开启时,系统会一直发送邮件信息,邮件服务关闭时,系统会大量生成小文件。

示例3:每分钟把系统时间追加到一个文件中,以2019-06-15_13:54:10格式

[root@localhost ~]# crontab -l* * * * * /usr/bin/date +\%F_\%T >> /root/time.txt

务必注意加上转义符号,因为在定时任务中,有些特殊符号会被误解,不转义是无法执行的。

示例4:每天凌晨3点做一次备份?将/etc/目录进行打包,备份到/backup下面,且只能保留最近三天的数据。

[root@localhost ~]# cat /root/bak.sh #!bin/bashexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 防止下述命令出问题mkdir /backupcd /tar -czf backup/$(hostname)_$(date +\%F_\%T)_etc.tar.gz /etc   find backup -type f -name "*.tar.gz" -mtime +3 |xargs rm -rf[root@localhost ~]# crontab -l* * * * * /bin/bash /root/bak.sh &>/dev/null

三 crontab不执行的问题

第一,脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概率占到 70%以上。因为程序执行到某一步导致crontab终止执行,我就碰到一次在迁移代码的时候将数据库连错了。导致无法访问而死在那里了。第二,执行环境问题,当我们碰到第一情况下,一般都可以通过手动执行程序将问题扼杀在摇篮里,一般情况下高手是不应该犯第一种错误的。问题是当我们 手动执行成功而crontab不能执行的时候,笔者碰到一次就是执行环境的问题,例如相关路径的设置问题。解决方案:在代码最前面执行 source /home/user/.bash_profile第三,系统时间不正确。这种问题最好理解,也是比较常见和隐蔽的问题,解决方案:date -s ********第四,就是我们的脚本是否有可执行权限。必须保证执行脚本的用户有执行改文件的权限。第五,crontab 守护进程死掉了。这种情况是极少发生的,但也不排除,当我们实在是找不到其他原因的时候可以用。解决方案:重启该进程。第六,crontab不执行的问题困扰了好长时间,脚本写的都正确,但是就是不执行,最终解决方法如下:crontab -u root /var/spool/cron/root这样root用户的crontab就生效了[root@localhost ~]# systemctl restart crond重启下服务就好了第七,crond没有启动第八,脚本编码问题,脚本在window下编写,传到linux下后报“锘?!/bin/bash”,用vi编辑器新建新shell脚本,输入内容后保存。第九* * * * * tar czf /tmp/`date "+%Y"` /etc 该计划任务中命令的执行流程是crond->tar命令,而crond在执行tar命令时,无法识别通配符%的意思(shell能识别),所以该命令无法正常执行改正结果:* * * * * tar czf /tmp/`date "+\%Y"` /etc通常都会把要执行的操作放到文件中,然后/bin/bash a.sh去执行,* * * * * /bin/bash a.sh  ,这样的执行流程就变成了crond->bash shell->a.sh,这样a.sh内即便是写%号,也能被识别出来

四 定时任务练习

1.每分钟打印你的名字到oldboy.txt中。

2.每周六的早上8点到12点,执行/scripts/test.sh脚本。

3.每个月的1号,执行/scripts/oldboy.sh脚本

4.每年的10月份1号到7号,执行/scripts/holiday.sh脚本

5.每天的9点和11点,执行/scripts/test.sh脚本

五 定时发邮件

https://www.cnblogs.com/linhaifeng/p/6602149.html#_label7

六 定时任务编写思路

1.手动执行命令,然后保留执行成功的结果。

2.编写脚本

​ 脚本需要统一路径/scripts
​ 脚本内容复制执行成功的命令(减少每个环节出错几率)

3.执行脚本

​ 使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash /bin/bash)
​ 执行脚本成功后,复制该执行的命令,以便写入cron

4.编写定时任务

​ 加上必要的注释信息, 人、时间、任务

​ 设定定时任务执行的周期

​ 粘贴执行脚本的命令(不要手敲)

5.调试定时任务

​ 增加任务频率测试

​ 检查环境变量问题(最好在脚本中重新定义环境变量PATH)

​ 检查crond服务日志

七 总结:9句箴言

1.定时任务规则之前加注释

2.使用脚本执行定时任务(只有一条简单命令的可以直接使用命令执行)

3.运行脚本一定要用绝对路径执行,统一脚本位置。

4.定时任务中date命令的百分号需转义才能使用。

5.命令或脚本结果(正确及错误)定向到空(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt 2>&1

6.避免不必要的程序及命令输出,如打包命令,tar -v的显示过程的选项。

7.打包压缩使用相对路径(切到目标目录的上一级打包目标)

8.定时任务脚本中的程序文件 ,尽量用绝对路径,用户的定时任务中的文件默认存放在当前用户的家目录

9.系统与命令位置有关的环境变量问题,建议脚本中重新定义环境变量PATH。

以上是关于linux的计划任务可以设定成每30秒钟执行命令一次么?就是 crontab -e 这个命令之后应该怎么写?的主要内容,如果未能解决你的问题,请参考以下文章