shell 脚本控制与计划任务

shell 脚本控制与计划任务

一、脚本优先级控制

可以使用nice和renice调整脚本优先级

避免出现不可控的死循环

  • 死循环导致CPU占用过高
  • 死循环导致死机

fork炸弹

.(){.|.&};.

二、捕捉信号

捕获信号脚本的编写

  • kill 默认会发送15号信号给应用程序
  • ctrl + c 发送2号信号给应用程序
  • 9号信号不可阻塞
# 信号脚本
#!/bin/bash

# 捕获15号信号
trap "echo sig 15"  15

# 捕获2号信号
trap "echo sig 2" 2

三、计划任务

计划任务:让计算机在指定的时间运行程序

1.一次性计划任务(at)

  1. 查看当前系统的时间:

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# date
    Sat Jan  2 20:29:07 CST 2021
    
  2. 在指定的时间内,执行指定的shell命令:

    # 使用at  xx:xx
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# at 20:31
    warning: commands will be executed using /bin/sh
    # 将hello 输出到/home/lvhuiqi/hello.txt 文件中
    at> echo hello > /home/lvhuiqi/hello.txt
    # ctrl + d 进行提交
    at> <EOT>
    job 2 at Sat Jan  2 20:31:00 2021
    

    ctrl + d 进行提交

  3. 查看当前at未执行的shell:

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# atq
    1	Sat Jan  2 20:39:00 2021 a root
    2	Sat Jan  2 20:31:00 2021 a root  # 这条是上述设计的
    

    使用atq查看一次性执行的内容

  4. 校验是否在指定时间输出shell命令:

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# cat /home/lvhuiqi/hello.txt
    hello
    
  5. 删除at中未执行的shell命令:

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# atrm 1
    

    atrm num 可指定删除at中的信息

2.周期性计划任务

  1. cron 配置方式

    • crontab -e
  2. 查看现有的计划任务

    • crontab -l
  3. 配置格式

    • 分钟 小时 日期 月份 星期 执行命令

    注意:命令的路径问题

# 1.执行命令:crontab -e 打开cron配置方式
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# crontab -e
# 每一分钟执行一次命令
* * * * * /usr/bin/date >> /home/lvhuiqi/hello.txt

如果想使用到秒的,需要另外安装三方包

# 星期一或星期五执行命令
* * * * 1,5 /usr/bin/date >> /home/lvhuiqi/hello.txt
# 星期一到星期五执行命令
* * * * 1-5 /usr/bin/date >> /home/lvhuiqi/hello.txt

查看 date的命令:

[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# which date
/usr/bin/date

查看cron的日志:tail -f /var/log/cron

# 1月1日下午15点整,执行脚本
0 15 1 1 * /usr/bin/date >> /home/lvhuiqi/hello.txt

注意:时间整点操作分钟必须为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unix或Linux系统中,你可以使用shell脚本来创建一个定时任务,让某个命令或脚本在特定时间点或按照一定的时间间隔自动执行。这个过程通常涉及到cron定时器服务。 1. **crontab文件**:每个用户都有一个名为`.crontab`的文件,用于配置cron任务。你可以用文本编辑器打开这个文件(如`crontab -e`)来添加新的定时任务。 2. **定时表达式**:在`.crontab`文件中,你需要定义一个定时表达式,它由五个字段组成,分别代表: - 分钟(0-59) - 小时(0-23) - 天(1-31) - 月份(1-12) - 周(0-7,其中0和7都代表周日) 例如,`0 1 * * *`表示每天的凌晨1点执行任务。 3. **添加任务**:添加一个新的任务行,格式通常是: ``` * * * * * /path/to/your/script.sh ``` 其中,`/path/to/your/script.sh`替换为你的shell脚本的实际路径。 4. **保存并激活**:完成编辑后,记得使用`crontab -u <username> -l > new_crontab`将更改保存到新的文件,再用`crontab -u <username> new_crontab`命令使更改生效,这里`<username>`是你的用户名。 如果你需要在预定时间结束后自动停止任务,这取决于你的脚本如何设计。通常,你可以通过在脚本中添加条件判断,比如计数器或检查某个标志来控制何时结束任务。如果没有直接的机制,你可能需要额外的逻辑处理或者使用进程管理工具(如`pkill`)来终止脚本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值