【树莓派】在树莓派上制作开机自启动程序及服务

希望将自己的application在树莓派(Raspberry Pi ),做成开机自动运行,进行了一些实践,如下:

 

测试环境:树莓派,管理员:root,普通用户:haochuang

实现目标:在Linux启动时,自动运行位于普通用户haochuang根目录下的脚本程序osprey,该程序会在每次执行时自动向本地日志文件追加一条记录,源码如下:

 

1. 准备好相应的 application

#!/bin/sh
### BEGIN INIT INFO
# Provides:          osprey
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Required-Start: $local_fs
# Required-Stop:
# chkconfig: 12345 99 05
# Short-Description: Start or stop the Osprey App.
### END INIT INFO

start(){
    echo -n "start osprey"
    cd /home/lifeccp/webapp/osprey
    su haochuang -c "java -jar osprey-*.jar --spring.profiles.active=test &"
}

stop(){
    echo -n "stop osprey"
}

case $1 in
start)
    start
    ;;
stop)
    stop
    ;;
*)
    echo "Usage: $0 (start|stop)"
    ;;
esac

 

2.为程序增加可执行权限,并将程序放到 /etc/init.d/

 mv osprey /etc/init.d/
 chmod +r /etc/init.d/osprey

 3.安装chkconfig

sudo apt-get install chkconfig

如果安装失败,则使用下面命令再次尝试:

sudo apt-get install chkconfig --fix-missing

 

4.运行chkconfig --add osprey, 把该服务添加到配置当中

 

5.运行chkconfig --list osprey,可以查看该服务进程的状态 

 

6.完了之后,reboot一下,并查看进程,进行验证;

 

 由于我增加了两个服务,结果截图如下:

 

补充1,方案的解释:

切换用户到haochuang,然后执行命令启动应用程序;

su haochuang                    --切换到相应用户
cd /home/haochuang                 --切换到根目录
java -jar osprey-1.0.4.jar --spring.profiles.active=test &  --执行应用程序
exit                         --退出帐号

 

做成服务的好处是可以定义多个交互命令,比如:start,stop,restart,reset...,在服务运行的过程中还可以做相应操作。

看起来好象一切都没错,但是发现只运行了第一行的命令,后面的都没有运行,直到退出lifeccp用户后才发现好象执行完毕。

分析原因,是因为Linux启动的时候是在root帐号下,执行su lifeccp等于打开了一个新的shell脚本,因此下面的代码都在等着新的Shell脚本结束才能运行,就象在主程序里调用了一个子程序,而子程序是个死循环,一下出来来结果下面的要等死了。

在执行上述脚本程序时,不要离开本身的Shell。我们可以把执行命令做为su的一个参数传递进去,因为没有涉及到打开新的Shell,因此可以正常执行你期望的脚本程序,顺利实现开机自动启动指定的脚本程序。

 

补充2,如果执行 sudo apt-get install chkconfig 一直报错,安装不成功,那么需要检查如下几点:

  • 检查设备网络情况是否正常,确保设备网络本身可通达内外网;
  • 更新一下系统配置:sudo apt-get update

然后再次重试。

 

 

如果有问题,请参考另一篇新的:【树莓派】在树莓派上制作开机自启动程序及服务2

 

posted @ 2016-10-27 18:54  念槐聚  阅读(18724)  评论(0编辑  收藏  举报