• 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

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

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

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

    先检查一下是否安装了crontab

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

    systemctl status crond.service

    可以看到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

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

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

    我们使用命令查看

    tail -f /var/log/cron

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

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

  • 相关阅读:
    抽象工厂例子
    学习boost::asio一些小例子
    boost::asio学习(定时器)
    共享内存
    网络流程图
    粘包
    端游服务器群
    38 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
    37 有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位.
    36 有n个整数,使其前面各数顺序向后移n个位置,最后m个数变成最前面的m个数
  • 原文地址:https://www.cnblogs.com/juanxincai/p/15852374.html
Copyright © 2020-2023  润新知