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

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

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

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

但#7 的就可以的其实…
liyvhg
2020-05-21 21:40:44 +08:00
@98546116 会😂
liyvhg
2020-05-21 21:45:18 +08:00
建议贴出原始需求
Acoffice
2020-05-21 21:45:45 +08:00
@AngryPanda 你这么写,是每分钟执行一次.
98546116
2020-05-21 21:47:08 +08:00
@ETiV 我实测*/3 这种方式出来的结果是 3 6 9····30 运行与路由器启动日期无关
Acoffice
2020-05-21 21:50:11 +08:00
0 0 */3 * * /path/script
98546116
2020-05-21 21:51:12 +08:00
@liyvhg 原始需求就是 以路由器启动后的时间计算 每隔三天自动运行一次命令 但是我这边用 corn 实测,在月末 30 号 31 号与月初 1 号 2 号之间并不是严格的间隔三天执行
Acoffice
2020-05-21 21:53:54 +08:00
@98546116 每次执行完,用文件记录当前日期,每天去检查一次这个日期,然后相减等于 3,就执行.
98546116
2020-05-21 21:58:13 +08:00
@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
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
2020-05-21 22:28:43 +08:00
严格的那就每天启动,然后和上次运行时间比较,看看是不是恰好是第三天。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/674150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX