|
发表于 2020-1-9 21:13:31
|
显示全部楼层
具体就是,先配置crontab,然后在里面设置定时任务,最后加入开机启动,完美。
* z: f; @+ x4 B& `( H3 p7 Y3 t! l1 J) Y0 d* a& A
写在前面的前面,其实我的需求就是DDNS,申请了HE.NET的账号,结果他的ddns实现方法特别简单,也特别难,因为核心就是一个http请求,设置成每5分钟执行一次,就ok,开始我是在win server 2019里面的计划任务里面设置,使用了一个脚本,让他定时执行脚本,不过,总是失败,只执行最开始的第一次,这里不在讨论。: m. ?/ r& w; m6 T0 j( @: y
) ~8 g! `. Z# h2 N而且,这台主机平时是关机状态(嫌费电),如果光猫不小心重启了,导致ip地址变化,就没法管理家里的路由器了(路由器开启了远程管理)。& F# U: F% ?- j5 V! T
- Q& l% B& `+ F0 s' u" u% ?因为我在路由器里设置了网络唤醒,管理到路由器就能管理到下面的电脑。电脑开启了远程桌面。所以,一些只有电脑才能办到的事情,就可以远程回家里,操作一番。比如一些办公软件,还是win下的好使,安卓版的触摸急死人,手机配上蓝牙鼠标键盘,远程回家里就是一台电脑。
/ s+ @/ u0 O( t. n/ N$ ~4 H% Z4 S/ T& J4 {- T; g" Z
注:路由器是基于openwrt系统,但是精简版,什么也干不了,上网找了一圈,找不到教程,所以发现8145V可以开openwrt后才找到这个帖子学习。
, V% X: ^ v$ T; B% m6 g
, E# }* q% y& _1 q5 d
. F/ c* a) ]) B* b3 L( ]写在前面,其实crontab -e就可以设置计划任务了。但是总不成功,所以才去网上找。下面一通操作,达到目的,如有谬误,欢迎指正,谢谢1 O- k2 U' B$ |6 M( W6 S
9 ~, J) N2 T( x. ]1、+ `9 T, ~1 B' E
mkdir /etc/crontabs,创建这个目录,当然,这个目录有,所以不用创建,如果没有则创建' Y" `; Z+ _6 c5 {! v# v
2、
% ~+ j' S B4 l6 }touch /etc/crontabs/root,生成root文件,以后就编辑这个添加任务就好了。这条我没执行,我用的下面的vim命令,直接生成文件并编辑
$ a3 W5 b i- r* I, H, o- O---------------------------
4 R5 I" s$ o4 Xvim /etc/crontabs/root,生成root文件,并编辑他
0 C6 P& X5 ?. K: g* W例如
. o/ q s, q o) J*/5 * * * * curl -4 http://xxx.com,这个是每5分钟一次http请求,注意不要https,-4是只用ipv4
4 k" O. g5 F8 N6 g. J. x3、1 Z9 g+ ~6 U% d4 D9 [0 g
ln -sf /etc/crontabs/root /etc/crontab ,产生关联,只要在vim /etc/crontabs/root,就可以映射到,crontab -e* ~% U' b# ?% ?3 E. x; z. d
4、6 M" ~3 K2 [: J( s9 M v, E
这个要说下,直接vim /etc/init.d/S60cron就会创建S60cron,并编辑他,写如下三行(空行不算)
, w: K0 }! u9 _$ |3 S) [% f #!/bin/sh4 H% w/ r9 r* h& Z5 a, m* L' K! `
0 E- J \ M7 j# P& a1 Z # start crond1 Y, W; M' ]- S+ w& o$ l' @: w
/usr/sbin/crond -c /etc/crontabs; ^! Y! \' s/ Z. X4 q% p8 @
5、
/ g5 S) Q9 k3 d: o然后给这个文件权限
8 U, H7 q/ w" X: e# A! Bchmod 755 /etc/init.d/S60cron
$ P5 T: x6 y) l- y* R( p! C+ O6、! f9 q5 R" [, {, @3 k1 { o
然后运行下面指令开启cron
, h+ }6 O2 r) [) {: a2 T/etc/init.d/S60cron
5 h3 M# f `& @+ l7、/ a% q, m5 {5 e `
运行日志,看下是否开启了cron9 y0 V0 \9 F. R, W
logread7 _8 e3 e+ s7 {. q2 I
日志文件中最后一行,也就是最新出现的,应该出现了类似下面的的一行。
2 {, @7 B$ _9 z% E" g2 _; w Mar 21 20:29:38 (none) kern.notice crond[687]: crond 2.3.2 dillon, started, log level 8
( ^4 [* e" | j' B- ~8、) v( I; K3 T3 p& y
每次编辑了cron(也就是第一条创建的root文件),都要重启服务来生效,以下就是命令2 U$ k8 b) p! s2 Z
killall crond; /etc/init.d/S60cron( B! y* l g1 f9 B* H3 P! f( K/ {
9、) d+ k& i% d$ I
因为一些命令通常都是10分钟一运行,所以会产生海量的日志记录,所以在vim /etc/init.d/S60cron的命令后面加上 /dev/null' K: `9 p0 V; }$ k2 H
#!/bin/sh2 V. c: E# j% X z8 [; l; o
1 p" L. R% ?5 s, A0 N& T$ y # start crond2 R, f1 }. z. S2 t2 `
/usr/sbin/crond -c /etc/crontabs -L /dev/null v* a5 C6 o3 W' z
0 w" ] l |% `) }' q4 O, m注意,因为我发现加上这个,我无法在logread里面看到任务是否生效,所以,我一直开着,以后有机会我再关闭。( _0 r7 S/ Z! B2 w U# c
' v& C% ~* h& Y% n; ^& L. i' G& g
设置完以上步骤应该就完了,但是我发现重启后就失效了,到了时间总是不执行。% e- e) V) _6 |/ h0 r' A1 t
所以我加上了开机启动$ y! `# W0 ?% G* A5 I4 h$ z
4 k1 A* ?6 o& a- A- f注意,如果不成功,需要直接运行下你的任务命令,看看行不行
C6 Y& G9 N3 U- a比如直接在#下输入命令并回车 Q; Y; b4 |9 \0 A1 }* V7 }$ Y
例如:
, ?9 `0 V* O3 ?$ @% Kroot@SAF:~# curl -4 http://www.baidu.com
/ F8 c) n& l3 p. O0 Q2 z( m看看能不能正常输出,如果不行,就要在这条任务这里先搞定再说后面的。$ E7 H& n) @3 y' @3 z( Z
$ q5 n* ?/ v! E* @) a. u
下面是我加开机启动的步骤) R' ]! ?" l9 a( u, D: N2 h$ a
一、在/etc/rc.local中添加/ u# U2 ]+ q, B% @
! B- Y: k: e5 s! U
如:
3 C9 L+ h3 u. g8 `+ J" {7 a$ vim /etc/rc.local" s5 W+ y) U& T$ N2 ~' |
#!/bin/sh
* ?3 m: n/ A2 m: F4 r( X, B& z+ L#
" x) [% T2 w. I# d: v# This script will be executed *after* all the other init scripts.
! z2 b; G) x0 B/ Q8 E# You can put your own initialization stuff in here if you don't; Z! ?9 _: I! ~* p9 K$ }1 L) m
# want to do the full Sys V style init stuff.
7 |4 C9 q w Z+ p% {& @
" K+ n* ^9 y( t7 f3 y7 Z* H0 W ~touch /var/lock/subsys/local/ g# o2 j! G7 }5 g
. /etc/rc.d/rc.tune
e! |# e0 l3 g# M" [* [/opt/pjt_test/test.pl e5 l4 s' T+ X2 i+ y
咱们在最后加个
0 k& U- x% o% D* _* ?, c) \killall crond; /etc/init.d/S60cron
/ [5 H& C; f$ ~1 I- P
1 n' g0 p( }5 g& ^3 c- g4 Sok了: b+ f/ `$ q8 b3 e' v+ s$ T9 y
I3 A; g9 G$ ?& a+ A参考了这个文章,这个文章是英文的,一点一点翻译就可以了。: ^. G0 W7 Y1 F2 R/ h
https://martybugs.net/wireless/openwrt/cron.cgi |
|