树莓派程序开机启动设置。
关于开机启动,我在网上找的一个教程,然后照着做了一次。
需要开机启动的程序是自己写的 我的是一个数据传输的程序,名字为 trans.py
开机启动脚本,保存在/etc/init.d目录下面:
#!/bin/bash
# /etc/init.d/trans
### BEGIN INIT INFO
# Provides: xiaofeng
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: trans initscript
# Description: transform data
### END INIT INFO
case "$1" in
start)
echo "Starting trans"
/scream/trans.py &
;;
stop)
echo "Stopping trans"
#kill all trans.py
kill $(ps aux | grep -m 1 'python /scream/trans.py' | awk '{ print $2 }')
;;
*)
echo "Usage: service ledblink start|stop"
exit 1
;;
esac
exit 0
这个是原来的脚本。我把红色标记的地方换成了我的程序的信息,然后就OK了。我脚本 的保存的名字是trans
修改权限:sudo chmod +x /etc/init.d/trans
可以通过service命令测试一下
sudo service trans start#启动
sudo service trans stop#停止
我开始时测试service命令出错,说找不到文件,应该是权限的问题,后来我又重新做了一边,莫名其妙得好了。
最后设置开机启动:sudo update-rc.d trans defaults
删除开机启动:update-rc.d -f trans remove
参照文章的出处:
https://www.embbnux.com/2015/04/12/raspberry_pi_setting_python_script_start_on_boot/
Update-rc.d 命令的用法 http://www.52pi.net/?p=255
关于脚本语言的case的用法:
case 字符串 in
模式1) command;;
模式2) command;;
......
Esac
Case语句是多分支语句,它按照“)”左边的模式对字符串值的匹配来执行相应的命令,匹配是由上而下地进行,总是执行首先匹配到的模式对应的命令表。如果,模式中的每一个都匹配不到,则什么也不执行,一边后再后面放一个*),表示以上都不匹配的任意字符串。“;;”表示该模式对应的命令部分的程序。
$#:表示保存程序命令行参数的数目。
$?:表示保存前一个命令的返回值。
$0:表示列出当前的程序名
$*:表示以“$1 $2...”的形式保存所有输入的命令行参数
$@:表示以“$1”“$2”...的形式保存所有输入的命令行参数。
$n:$1为命令行的第一个参数,$2为命令行的第二个攒书,一次类推。
权限设置:
chmod u+x name 表示只有自己可以执行
chmod ug+x name 表示自己以及同一群可以执行。
chmod +x 表示所有人都可以执行