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

简介:

希望将自己的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

然后再次重试。

 

本文转自 念槐聚 博客园博客,原文链接:http://www.cnblogs.com/haochuang/p/6005121.html,如需转载请自行联系原作者

相关文章
快速生成软著申请时所需的60页代码文档的免费工具
本篇文章主要讲解,制作软著代码文档的高效方法,当然不可能手动一个个复制了,这显然太笨拙,他浪费时间了。这里我给大家介绍一个更快的方式。
7488 0
|
自然语言处理 安全 Linux
一文详解远程控制安全与远程控制软件(横测ToDesk\AnyDesk\向日葵)
一文详解远程控制安全与远程控制软件(横测ToDesk\AnyDesk\向日葵)
620 0
一文详解远程控制安全与远程控制软件(横测ToDesk\AnyDesk\向日葵)
|
IDE TensorFlow 算法框架/工具
成功解决 OSError: [WinError 193] %1 不是有效的 Win32 应用程序
成功解决 OSError: [WinError 193] %1 不是有效的 Win32 应用程序
|
8月前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
1471 1
|
JavaScript 前端开发
使用js,html,css实现歌词滚动的效果
使用js,html,css实现歌词滚动的效果
218 0
|
SQL 关系型数据库 数据库
PostgreSQL 常用函数分享
PostgreSQL 常用函数分享
226 0
|
JavaScript 搜索推荐
js 混合排序(同时存在数字、字母、汉字等)
js 混合排序(同时存在数字、字母、汉字等)
664 0
|
XML Android开发 数据格式
Android App开发实战项目之大头贴App功能实现(附源码和演示 简单易上手)
Android App开发实战项目之大头贴App功能实现(附源码和演示 简单易上手)
242 0
|
分布式计算 Hadoop 网络安全
|
算法 Serverless C语言
Matlab使用S函数
Matlab使用S函数