Linux定时执行.sh脚本

简介: Linux定时执行.sh脚本

因为测试ffmpeg推流用flv方式的话没有做自动断流,所以要先用.sh脚本来执行关流,降低CPU和其他资源占用

 

首先编写.sh文件

#! /bin/bash
echo "kill ffmpeg is start..."
killall -9 ffmpeg
echo "kill ffmpeg is ok!"

开头是指此脚本使用/bin/bash来解释执行。


接下来是输出执行开始,执行杀死指定名字的所有进程 ,然后输出执行完成


将.sh文件保存为killffmpeg.sh并上传在linux服务器上,我这里的路径为/root/test/,注意,windows下保存脚本可能会有问题,因为:


Windows下换行符号是“\r\n”


回车符是Carriage Return, C语言中是'\r' 换行符是Line Feed, C语言中是'\n' 回车换行符实际是两个字符, 就是\r\n;


而linux下是“\n”没有”\r”;


执行以下命令

sed -i 's/\r$//' ./killffmpeg.sh

并且赋予.sh脚本执行权限,777是最高权限,根据自己的需要来修改,可以使用ll ./文件名来查看执行权限

chmod 777 ./killffmpeg

接下来我们尝试执行已下已经编写好的脚本

1898904-20220128110216072-1543762708.png

可以看到,因为没有正在拉推的多媒体流所以输出了未找到进程,这是正常情况

但是我们光有脚本还不行,我们需要定时任务执行器crontab来让脚本定时执行


先检查一下是否安装了crontab


我安装的操作系统是CentOS8.4所以使用systemctl ,有的朋友是service这样,注意一下

systemctl status crond.service

1898904-20220128111200576-1993057054.png

可以看到CentOS8.4已经预安装了cron,并且是enable状态


如果没有安装的朋友可以参考这篇博客

https://blog.csdn.net/hukai0q/article/details/83380951

可以使用yum来安装


然后就可以配置任务了


修改 /etc/crontab 然后在最下面一行添加任务也可以,注意脚本文件的路径是绝对路径,可以用pwd命令来查看


[root@localhost cron]# vi/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
*/1 * * * * root /root/test/killffmpeg.sh

文件/etc/crontab中每行任务的描述格式如下:


minute hour day month dayofweek command


minute - 从0到59的整数


hour - 从0到23的整数


day - 从1到31的整数 (必须是指定月份的有效日期)


month - 从1到12的整数 (或如Jan或Feb简写的月份)


dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)


command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)


每一分钟执行  */1 * * * *


每小时执行     0 * * * *


每天执行       0 0 * * *


每周执行       0 0 * * 0


每月执行       0 0 1 * *


每年执行       0 0 1 1 *


root表示以root用户身份来运行


run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本


对于以上各语句,星号(*)表示所有可用的值。例如*在指代month时表示每月执行(需要符合其他限制条件)该命令。


整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4


指定数值由逗号分开。如:3,4,6,8表示这四个指定整数。


符号“/”指定步进设置。“/<interger>”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。

以“#”开头的为注释行,不会被执行。


  • 星号(*) :代表所有可能的值,例如,month字段如果是星号,则表示在满足其它字段的制约条件后,每月都执行该命令操作;


  • 逗号(,) :可以用逗号隔开的值,指定一个多元素的列表,例如:1,2,5,7,8,9


  • 中杠(-) :可以用整数之间的中杠表示一个整数范围,例如“2-6”表示:2,3,4,5,6


  • 正斜线(/) :可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行

一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次


crontab -l

如果报:no crontab for root


主要原因是由于这个liunx服务器 第一次使用 crontab ,还没有生成对应的文件导致的,执行了 编辑(crontab -e)后就生成了这个文件


crontab -e

直接编辑添加一行,注意这里不需要加root,保存退出即可


*/1 * * * * /root/test/killffmpeg.sh

crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务


crontab -l //列出当前的所有调度任务


crontab -l -u jp //列出用户jp的所有调度任务


crontab -r //删除所有任务调度工作


一般情况保存退出后就已经存在任务列表了,可以使用crontab -l 来进行查看,如果还没有的话可以重新载入或者重启crontab来刷新任务列表


systemctl reload crond.service
systemctl restart crond.service

1898904-20220128113536034-705877521.png


再次执行crontab -l 可以看到刚才添加的任务已经存在了


crontab的默认日志路径在/var/log/cron


我们使用命令查看


tail -f /var/log/cron

1898904-20220128143545284-1733799521.png

可以看到,我们的定时任务已经成功执行并输出了执行结果

 

至此,配置定时执行.sh脚本完成

 

相关文章
|
4天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
3月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
224 6
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
115 3
|
1月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
52 3
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
81 1
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
788 2
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
37 0
|
3月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。