ubuntu16.04 程序开机自启动设置及启动优化
使用过程中,为了方便使用,有一些程序需要开机时自启动应用,下面将介绍一下ubuntu16.04下程序的开机自启动设置方法。
1 建立一个可执行程序的运行脚本如 keepalive.sh。内部写入要执行的程序等逻辑脚本, 内容如:
#!/bin/bash
# -*- coding: utf-8 -*-
cmd=$(pgrep -c recogFaceC)
export ACE_ROOT=/home/ubuntu/system-setup/wwei/ACE_wrappers
export THID_ONLY_DEEP_FEATURE=1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ACE_ROOT/ace
export GOPATH=/home/ubuntu/go
if [[ $cmd -lt 1 ]]
then
nohup /home/ubuntu/system-setup/baic/baicmotor/connection/recogFaceConnection > /tmp/serial.log 2>&1 &
fi
cmdface=$(pgrep -c TFaceRecogS)
if [[ $cmdface -lt 1 ]]
then
nohup /home/ubuntu/system-setup/baic/0411/bin/TFaceRecogService > /tmp/face.log 2>&1 &
fi
以上内容是分别启动了两个程序recogFaceConnection TFaceRecogService 并在tmp下分别打印了两个日志serial.log face.log。 if [[ $cmd -lt 1 ]] 为启动个数小于1 去启动程序
环境变量根据实际依赖的配置的环境变量复制粘贴到此处, 程序名称和运行路径根据实际情况修改。
2 启动程序脚本写完后,需要将此添加到开机启动项里边,有以下两种方法:
(一) 比较简单的方法
在/etc/rc.local中添加
如果不想将脚本粘来粘去,或创建链接什么的,
则:
step1. 先修改好脚本,使其所有模块都能在任意目录启动时正常执行;
step2. 再在/etc/rc.local的末尾添加一行以绝对路径启动脚本的行;
如:
$ vim /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
. /etc/rc.d/rc.tune
/home/ubuntu/keepalive.sh
保存并退出;
再重启动测试下,则在其它的程序都启动完成后,将启动脚本;
此方法程序启动较慢,需要系统其他启动完后最后启动该脚本。因为rc.local 为系统启动完成才执行的脚本。对启动时间没有特殊的要求可以采用此方法。
(二)可设定启动优先级的高级自启动设置
上边一方法介绍了rc.local中添加的方法,rc.local为系统及的脚本,可以参照此写自己脚本,并设置优先级。
(1)将/etc/rc.local 复制一份如rc.hisign,将内容修改为自己的执行脚本。内容如下:
#!/bin/sh -e
/home/ubuntu/keepalive.sh &
exit 0
注意一定要加&符号。
/etc/下面有这么几个目录值得注意:
rcS.d rc0.d rc1.d ... rc6.d ,
(0,1... 6 代表启动级别 0代表停止,1代表单用户模式,2-5代表多用户模式,6代表重启) 启动顺序从小到大。数字小的优先执行启动
(它们的作用就相当于 redhat 下的 rc.d ,你可以把脚本放到 rcS.d,然后修改文件名,给它一个启动序号,如:S88rc.hisign.)
最好的办法是将脚本放到相应的启动级别下面, 下面步骤为具体方法
(2)进入/etc/init.d 下,将此下的rc.local 复制一份改为rc.hisign 修改内容将rc.local 替换为rc.hisign。 # Required-Start: $all 的$all去掉。 rc.hisign内容如下:
#! /bin/sh
### BEGIN INIT INFO
# Provides: rc.hisign
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.hisign if it exist
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh
. /lib/lsb/init-functions
do_start() {
if [ -x /etc/rc.hisign ]; then
[ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.hisign)"
/etc/rc.hisign
ES=$?
[ "$VERBOSE" != no ] && log_end_msg $ES
return $ES
fi
}
case "$1" in
start)
do_start
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop|status)
# No-op
exit 0
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
注意将 # Required-Start: $all 的$all去掉。否则会在所有启动后在启动。
或者将已经写好的rc.hisign 直接添加到/etc/init.d下 ,如果没有读写权限 sudo chmod x rc.hisign 设置权限。
(3) /etc/init.d/下脚本rc.hisign创建完成后,
可以选择执行 sudo runlevel 查看当前系统启动级别,结果为 N 5 。
接下来 设定启动级别
sudo update-rc.d rc.hisign start 01 2 3 4 5 .
01 为启动序号,
2 3 4 5分别是系统的运行级别,可自己调整只写一个3等
注意不要忘了结尾的句点。
现在我们到 /etc/rc2.d 下,就多了一个 S01rc.hisign这样的符号链接。
重起计算机,查看是否有效。
至此开机自启动设置完成。
(三) 附加信息
当你需要移除这个符号连接时,方法有三种:
1. 直接到 /etc/rc2.d 下删掉相应的链接,当然不是最好的方法
2. sudo update-rc.d -f s10 remove //推荐做法 或者 sudo update-rc.d -f rc.hisign remove
3. 如果 update-rc.d 命令你不熟悉,还可以试试看 rcconf 这个命令,也很方便。
4 .update-rc.d rc.hisign defaults 将脚本添加到随机启动项
5 . update-rc.d rc.hisign defaults 80 指定服务启动的顺序,数字越小,启动顺序越靠前。
6. sudo sysv-rc-conf 命令去除一些非必要的开机启动项,没有sudo apt install sysv-rc-conf 进行安装
3 .设置监控程序 , 以便当程序推出后可以自启动程序。
用cron来实现这一功能。
执行sudo crontab -e 最后一行添加 * * * * * /home/ubuntu/keepalive.sh &
前边几个* 分别代表年月日时分信息,及每分执行检测一下该启动脚本,脚本keepalive.sh内如果程序退出了会重新启动,如果启动了 就不会在启动。
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
也可以将*号换成具体的日期时分 固定时间启动该脚本。
ubuntu16.04 程序开机自启动设置及启动优化的更多相关文章
- WinForm 之 应用程序开机自启动设置方法
一.原理 需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下. 二.实现方式 方法1:在生成安装程序时配置: 方法2:在程序运行时动态配置. 三.在生成安装程序时配置 1.右击安装 ...
- win 程序开机自启动设置
若程序设置了开机自启动,但是仍没有效果,可能是被什么拦截了,或者什么原因.导致开机并没有自启动,那么如何解决呢? 解决方法:将软件的快捷方式 或 单个软件 直接拷贝到 如下目录,即可强制实现开机自启动 ...
- vc++ 程序开机自启动和取消启动
//开机启动 int CMainWnd::CreateRun() { //添加以下代码 HKEY hKey; }; //得到程序自身的全路径 DWORD dwRet = GetModuleFileNa ...
- Linux设置程序开机自启动,系统命令chkconfig及linux /etc/rc.d/目录的详解
整理了linux下程序开启几种方式,转载相关博客做统一记录 <linux程序设置开机自启动>转载自:https://www.cnblogs.com/flcz/p/7691532.html ...
- Linux设置程序开机自启动
注意: 作者测试时,Linux版本为RedHat6,同时应用在CentOS6应该也可以(作者未实测,但有同事在CentOS6上使用可行),系统版本的不同,可能造成操作上的差异(CentOS7就与Cen ...
- android 程序开机自启动
今天遇到程序开机自启动,然后查了一下,很简单,就记录一下. 开机自启动,一般我们是开启启动一个广播,然后在广播里启动Activity或者别的服务. 我们要做的很简单,就是在AndroidManifes ...
- 【tomcat环境搭建】Linux和Windows下tomcat开机自启动设置
目前很多项目都部署在tomcat上,频繁操作中,每次启动或关闭tomcat都稍显麻烦,那如何设置tomcat的开机自启动? Linux下tomcat的开机自启动设置 网上主要有两种方式,一种是shel ...
- Linux和Windows下tomcat开机自启动设置
Linux下tomcat的开机自启动设置 1.修改系统文件rc.local:vi /etc/rc.d/rc.local rc.local是给用户自定义启动时需要执行的文件,和windows里面的“启动 ...
- linux下Oracle数据库实例开机自启动设置
linux下数据库实例开机自启动设置 1.改动/oratab [root@org54 ~]# vi/etc/oratab --把N改为Y,例如以下提示 # This file is used ...
随机推荐
- 用rekit创建react项目
第一步 先进入github.com 然后搜索rekit 往下滑 1 . 先全局安装 npm install -g rekit 2 . 进入自己想要创建项目文件的目录输入 rekit create / ...
- Android如何在http头信息里设置参数
在使用http请求server时常常要传递一些参数给server,如IMEI号.平台号.渠道号.客户端的版本号等一些通用信息,像这些参数我们没有必要每次都拼在url后,我们可以统一添加到http头里. ...
- 28.Mysql权限与安全
28.Mysql权限与安全28.1 Mysql权限管理 28.1.1 权限系统的工作原理对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接:对通过认证的合法用户赋予相应的权限,用户可以 ...
- Python3实战系列之六(获取印度售后数据项目)
问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:此篇我们试着把python程序打包成.exe程序.这样就可以在服务器上运行了.实现首篇计划列表功能模块的第三步: 3..exe文件能在服务器上 ...
- NFS服务简介与配置
NFS简介 NFS特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源 在NFS的应用中, ...
- 获取sql 时间时分秒
select DATE_FORMAT(now(),'%Y-%m-%d %T') from dual; 年月日时分秒 select DATE_FORMAT(now(),'%T') from dual; ...
- html-minifier中文文档
HTMLMinifier是一个高度可配置的.经过良好测试的.基于javascript的HTML缩小器.参见相应的博客文章,了解它的工作原理.每个选项的描述.测试结果和结论.在线测试套件.还可以看到相应 ...
- css插入背景图片底部有白边的解决方法
相信很多小伙伴遇到过用CSS插入背景图时,底部出现白边的情况,如下图: 个人总结了2个方法如下: 解决方法1:给图片都加上 vertical-align: middle属性.有时,移动端也会有类似 ...
- HttpClient 传输文件的两种方式
1. org.apache.commons.httpclient.HttpClient 1.1 pom <dependency> <groupId>org.apache.htt ...
- Java入门知识点
Java入门知识点 Java源代码的流程 Java程序由.java文件生成,通过JVM进行编译得到字节文件.class class HelloWorld { public static void ...