最近在搞路由器自动登录,用到了OpenWrt的自动启动。因为我要运行的是一个Python程序,一条命令足够,就直接在/etc/rc.local里面改了。
python /etc/Myprogram.py
直接占用前台了。既需要让他后台运行,又不想安装nohub。所以:
( python /etc/Myprogram.py >/dev/null 2>&1 )&
用Python运行Myprogram.py,并把输出重定向到/dev/null(即丢弃)。最后的 “&” 让程序后台运行。
rc.local在系统每次启动时由/etc/rc.d/S95done 调用,是一个shell 脚本,是在系统开机之后最后会调用到的脚本。也就是说,在OpenWrt系统下,有可能网卡还没初始化完成,这里的代码就已经运行完成了。在特定情况下需要延迟启动的时候,可以让他等一下再执行。
sleep 10 && ( python /etc/Myprogram.py >/dev/null 2>&1 )&
补充我看到的一个用法:
((python /etc/Myprogram.py)&)&
为什么套了两层我不知道,但他确实也能用。
另一种方法:
- 在/etc/init.d/中按照以下格式编写Shell脚本,假设命名为Myshell
#!/bin/sh /etc/rc.common
START=99 #这里是启动优先级
STOP=15 #这里是停止优先级
start(){
#要运行的代码
}
stop(){
#要运行的代码
}
restart(){
#要运行的代码
}
enable(){
#要运行的代码
}
disable(){
#要运行的代码,后三个可以不写但不建议留空
}
- 赋予运行权限
(1) 使用chmod命令将脚本变为可执行脚本。我一般给755(rwxr-xr-x)。
chmod 755 Myshell
(2) 使用 “Myshell enable” 使得脚本开机自启动。其中,Myshell为前面编写的脚本文件名。这里需要输入完整路径。
/etc/rc.d/Myshell enable
“Myshell enable” 命令实质上是为脚本文件创建一个软链接,软链接存放于/etc/rc.d/下。所以如果不想使用enable命令,可以自己创建软链接。
- 自启动设置完成啦,测试一下吧!