V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
98546116
V2EX  ›  路由器

请教一下, Padavan 固件如何实现启动后每隔三天执行一次命令

  •  
  •   98546116 · 2020-05-21 20:23:20 +08:00 via iPhone · 2899 次点击
    这是一个创建于 1645 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人没有编程基础,查了下 corn 貌似并不严格支持这种方式,目前想法是用 corn 每天执行一次脚本 a,脚本 a 里判断当天是否符合隔三天的条件,然后再执行。目前有两个问题,一是这个脚本 a 咋写?查了下百度,看的有点头晕。二是这个脚本 a 如何上传到路由器固件里并保存?或者如何直接在路由器 web 界面新建一个脚本文件?
    20 条回复    2020-05-21 22:28:43 +08:00
    yeqizhang
        1
    yeqizhang  
       2020-05-21 20:29:44 +08:00 via Android
    写一个脚本,开机启动后,关机命令前的代码阻塞三天哈哈哈
    vcheckzen
        2
    vcheckzen  
       2020-05-21 20:35:31 +08:00 via Android
    有点经验,楼主可加我
    cXEzMzE5MTQ5MTA=
    AngryPanda
        3
    AngryPanda  
       2020-05-21 20:50:21 +08:00 via Android
    sleep😿
    98546116
        4
    98546116  
    OP
       2020-05-21 20:53:27 +08:00 via iPhone
    @AngryPanda 不是只执行一次,是每隔三天循环执行,sleep 实现不了吧
    intelmd
        5
    intelmd  
       2020-05-21 20:57:11 +08:00 via Android
    每天一次,启动后检查当前日期是不是 3 的倍数,是的话运行。
    ETiV
        6
    ETiV  
       2020-05-21 20:58:34 +08:00 via iPhone
    while true; do
    xxxx
    sleep 3 天
    done
    AngryPanda
        7
    AngryPanda  
       2020-05-21 21:05:28 +08:00 via Android
    * * */3 * * /path/to/your/file

    不行么
    98546116
        8
    98546116  
    OP
       2020-05-21 21:08:52 +08:00 via iPhone
    @AngryPanda 月头月尾会有问题的
    98546116
        9
    98546116  
    OP
       2020-05-21 21:11:37 +08:00 via iPhone
    @ETiV 请教下,如果我把它放在现成的脚本文件里,这个循环会影响后面的命令继续执行吗?
    ETiV
        10
    ETiV  
       2020-05-21 21:40:25 +08:00 via iPhone
    @98546116
    会影响

    可以外头包一层括号,右括号后边加一个& 放到后台执行

    但#7 的就可以的其实…
    liyvhg
        11
    liyvhg  
       2020-05-21 21:40:44 +08:00 via Android
    @98546116 会😂
    liyvhg
        12
    liyvhg  
       2020-05-21 21:45:18 +08:00 via Android
    建议贴出原始需求
    Acoffice
        13
    Acoffice  
       2020-05-21 21:45:45 +08:00 via Android
    @AngryPanda 你这么写,是每分钟执行一次.
    98546116
        14
    98546116  
    OP
       2020-05-21 21:47:08 +08:00 via iPhone
    @ETiV 我实测*/3 这种方式出来的结果是 3 6 9····30 运行与路由器启动日期无关
    Acoffice
        15
    Acoffice  
       2020-05-21 21:50:11 +08:00 via Android
    0 0 */3 * * /path/script
    98546116
        16
    98546116  
    OP
       2020-05-21 21:51:12 +08:00 via iPhone
    @liyvhg 原始需求就是 以路由器启动后的时间计算 每隔三天自动运行一次命令 但是我这边用 corn 实测,在月末 30 号 31 号与月初 1 号 2 号之间并不是严格的间隔三天执行
    Acoffice
        17
    Acoffice  
       2020-05-21 21:53:54 +08:00 via Android
    @98546116 每次执行完,用文件记录当前日期,每天去检查一次这个日期,然后相减等于 3,就执行.
    98546116
        18
    98546116  
    OP
       2020-05-21 21:58:13 +08:00 via iPhone
    @Acoffice
    0 0 0 1/3 * ?最近十次运行时间为
    2020-05-22 00:00:00
    2020-05-25 00:00:00
    2020-05-28 00:00:00
    2020-05-31 00:00:00
    2020-06-01 00:00:00
    2020-06-04 00:00:00
    2020-06-07 00:00:00
    在 31 号和 1 号之间并不是 3 天,至于 0 0 */3 * *也类似,在月末 月初交替的时候会出问题的
    imdong
        19
    imdong  
       2020-05-21 22:24:16 +08:00
    ```
    #!/bin/bash

    time_record_file="$0.time"
    now_time=`date +%s%3N`
    time_diff=${now_time}
    if [ "$1" == 'start' ]; then
    echo ${now_time} > ${time_record_file}
    exit;
    elif [ "$1" == 'start_run' ]; then
    echo '0' > ${time_record_file}
    fi
    if [ -f $time_record_file ]; then
    old_time=`cat ${time_record_file}`
    time_diff=`expr ${now_time} - ${old_time}`
    fi
    if [ ${time_diff} -lt 259200 ]; then
    exit
    fi
    echo ${now_time} > ${time_record_file}

    ############# 开始你的代码
    echo "开始运行了"

    ```

    =============
    如你帖子所希望的,每次运行前检查距离上次运行
    至于 cron 要定义 每分钟执行一次,还是每天执行一次,自己取舍吧。

    cron 里面 /path/script 定时运行即可

    开机启动加入 /path/script start (但开机时不会执行代码)

    如果需要开启时也执行一次代码,就开机启动加入 /path/script start_run

    参考资料:Google Search

    Google 关键词:
    1. shell 时间戳
    2. shell 文件是否存在
    3. shell 减法
    4. shell if 小于
    AngryPanda
        20
    AngryPanda  
       2020-05-21 22:28:43 +08:00
    严格的那就每天启动,然后和上次运行时间比较,看看是不是恰好是第三天。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1133 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.