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

简介:

希望将自己的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,如需转载请自行联系原作者

相关文章
|
IDE 物联网 开发工具
[转]ESP32 RFID教程:打印MFRC522固件版本
本文旨在介绍如何通过ESP32与MFRC522 RFID读卡器进行通信。本ESP32教程的测试是使用集成在ESP32开发板中的DFRobot的ESP-WROOM-32设备进行的。由于RFID设备可能非常复杂,我们将从打印其固件版本这样一个简单的示例入手。
 [转]ESP32 RFID教程:打印MFRC522固件版本
|
固态存储 Ubuntu Unix
树莓派 之 设置使用外置硬盘启动
本文转载于My Nook,仅供大家学习用~ 红色部分为我添加部分,方便大家阅读和使用代码. 整件事情是这样的:某一天我尝试在树莓派上安装一个 vim 的编辑器插件 YouCompleteMe,需要从源码编译。
3142 0
|
NoSQL 关系型数据库 MySQL
探索Sun-Panel:一站式服务器、NAS导航面板、Homepage、浏览器首页
Sun-Panel是一款开源的浏览器导航页解决方案,旨在提供一种可私有化部署的综合体验,融合服务器、NAS管理和首页功能。与市面其他未开源的导航插件不同,Sun-Panel允许用户自定义JS和CSS,支持Docker部署(包括Arm系统)和多账号隔离。通过docker-compose进行简单部署,用户可选择SQLite或配置MySQL、Redis。默认账号为admin@sun.cc,密码12345678。该项目提供了一个更简洁、高效的网页管理工具,以适应数字化时代的需求。
3006 5
探索Sun-Panel:一站式服务器、NAS导航面板、Homepage、浏览器首页
|
机器学习/深度学习 自然语言处理 数据可视化
阿里云 ModelScope模块分析测评
阿里云 ModelScope 是一种用于模型评估和性能分析的开源工具。它旨在帮助用户更好地了解和评估不同的机器学习模型,并提供可视化和统计分析来支持决策制定。
|
网络协议 Unix Linux
如何使用putty连接阿里云服务器
如何使用putty连接阿里云服务器
3639 0
如何使用putty连接阿里云服务器
|
IDE 安全 Android开发
深入探索Android与iOS操作系统的架构差异
本文旨在对比分析Android和iOS两大主流移动操作系统在架构设计上的根本差异。通过详细解读两者的系统架构、开发环境、以及安全性等方面,揭示它们各自的特点及优势,为开发者选择合适的平台提供参考。
|
机器学习/深度学习 算法 关系型数据库
【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)
【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)
6763 1

热门文章

最新文章