本篇为上一篇的续 树莓派 -- 根据 CPU 温度控制风扇起停
有了散热的硬件和软件,接下来我们让树莓派开机的时候,自动启动风扇控制程序
根据上篇的文章提到的代码,保存为 /opt/airfan.py
也可以去这里下载代码oschina-gist
将下面的代码保存到 /etc/init.d/airfan
文件中(根据惯例)
#!/bin/sh
### BEGIN INIT INFO
# Provides: airfan
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start Airfan daemon
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
case "$1" in
start)
echo "Start Airfan"
python -u /opt/airfan.py > /var/log/airfan.log &
;;
stop)
echo "Stop Airfan"
ps aux | grep 'airfa[n]' | awk '{print $2}' | xargs kill
;;
*)
echo "Usage: service airfan <start|stop>"
exit 1
;;
esac
exit 0
增加可执行权限 chmod +x /etc/init.d/airfan
具体解释下每个部分的含义
### BEGIN INIT INFO
# Provides: airfan
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start Airfan daemon
### END INIT INFO
这段注释,是 Debian 系统中一个叫insserv
的程序依赖的。update-rc.d
依赖的则是insserv
这个程序。没有这段注释的话就是出来各种 Warning。
$ update-rc.d airfan defaults
执行完命令之后会发现,再/etc/rc2.d
里面发现一个软连接S01u2init -> ../init.d/u2init
rc2.d 代表 runlevel2 的时候执行。其中的 S 表示启动(K 代表停止),01 代表优先级,数字越大执行越靠后。
文件 /etc/init.d/airfan
的注释中,有一句 # Default-Start: 2 3 4 5
其中的2 3 4 5
代表 linux 系统中的 runlevel
runlevel 分为 6 个不同的等级
通过 runlevel
命令可以查看当前的 runlevel。通常的系统都是5(就算是你下载的 server 版的 linux 系统,通常的 runlevel 也是 5), 使用init
命令可以切换 runlevel。比如init 6
即执行重启的功能。init 1
就切换到了单用户模式。
当运行在 runlevel 5(正常模式下),操作系统在启动时会依次遍历目录 /etc/rcS.d
,/etc/rc5.d
。 检查目录下以S
开头的软链接,然后执行 start 操作。根据后面的数字来设置执行顺序。
文件名的结构通常是 S03keyboard-setup -> ../init.d/keyboard-setup