在本文中,我们将给您介绍关于如何使一个openwrt下的软件开机自启动的详细内容,并且为您解答openwrt自启动的相关问题,此外,我们还将为您提供关于Android应用如何开机自启动、自启动失败原因
在本文中,我们将给您介绍关于如何使一个openwrt下的软件开机自启动的详细内容,并且为您解答openwrt 自启动的相关问题,此外,我们还将为您提供关于Android 应用如何开机自启动、自启动失败原因、Centos6.8下设置gitlab服务开机自启动,关闭防火墙开机自启动、CentOS7如何设置开机自启动程序、开机自启动脚本?、linux下的软件开机自动启动方案的知识。
本文目录一览:- 如何使一个openwrt下的软件开机自启动(openwrt 自启动)
- Android 应用如何开机自启动、自启动失败原因
- Centos6.8下设置gitlab服务开机自启动,关闭防火墙开机自启动
- CentOS7如何设置开机自启动程序、开机自启动脚本?
- linux下的软件开机自动启动方案
如何使一个openwrt下的软件开机自启动(openwrt 自启动)
条件有三:
1.需要在软件包的Makefile中添加宏定义Package/$(package-name)/preinst和Package/$(package-name)/prerm
define Package/hello/postinst
#!/bin/sh
# check if we are on real system
if [ -z "$${IPKG_INSTROOT}" ]; then
echo "Enabling rc.d symlink for hello"
/etc/init.d/hello enable
fi
exit 0
endef
define Package/hello/prerm
#!/bin/sh
# check if we are on real system
if [ -z "$${IPKG_INSTROOT}" ]; then
echo "Removing rc.d symlink for hello"
/etc/init.d/hello disable
fi
exit 0
endef
2.需要一个启动脚本,并且需要有执行权限(曾尝试过直接将脚本放置在target/linux/$(chip-series)/base-files/etc/init.d目录下,但是openwrt启动后不会执行这个脚本,为什么,因为没有执行权限,那么直接修改此脚本的权限呢?不可行)
如何实施?
将启动脚本制作成一个此软件包的补丁,放到软件包的patches目录下,脚本内容如下:
#!/bin/sh /etc/rc.common
# "new(er)" style init script
# Look at /lib/functions/service.sh on a running system for explanations of what other SERVICE_
# options you can use, and when you might want them.
START=200
APP=hello
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
start() {
service_start /usr/bin/$APP
}
stop() {
service_stop /usr/bin/$APP
}
3.脚本准备好了,那么此时需要安装脚本到要制作的根文件系统中
在软件包的Makefile中的宏定义Package/$(package-name)/install里加入以下类似代码:
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) $(script-path) $(1)/etc/init.d
这样权限就有了
Android 应用如何开机自启动、自启动失败原因
Android 应用如何开机自启动、自启动失败原因
本文主要介绍 Android 应用如何开机自启动、自启动失败的原因、adb 命令发送 BOOT_COMPLETED。
1、Android 应用如何开机自启动
(1)、在 AndroidManifest.xml 中注册
注意不仅要添加 android.intent.action.BOOT_COMPLETED 对应的 action,还需要添加对应的 uses-permission
(2)、Receiver 接收广播进行处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public
class
BootBroadcastReceiver
extends
BroadcastReceiver
{
public
static
final
String
TAG
=
"BootBroadcastReceiver"
;
@Override
public
void
onReceive
(
Context
context
,
Intent
intent
)
{
String
action
=
intent
.
getAction
(
)
.
toString
(
)
;
if
(
action
.
equals
(
Intent
.
ACTION_BOOT_COMPLETED
)
)
{
// u can start your service here
Toast
.
makeText
(
context
,
"boot completed action has got"
,
Toast
.
LENGTH_LONG
)
.
show
(
)
;
return
;
}
}
}
|
2、自启动失败的原因
接收不到 BOOT_COMPLETED 广播可能的原因
(1)、BOOT_COMPLETED 对应的 action 和 uses-permission 没有一起添加
(2)、应用安装到了 sd 卡内,安装在 sd 卡内的应用是收不到 BOOT_COMPLETED 广播的
(3)、系统开启了 Fast Boot 模式,这种模式下系统启动并不会发送 BOOT_COMPLETED 广播
(4)、应用程序安装后重来没有启动过,这种情况下应用程序接收不到任何广播,包括 BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION 等等。
Android3.1 之后,系统为了加强了安全性控制,应用程序安装后或是 (设置) 应用管理中被强制关闭后处于 stopped 状态,在这种状态下接收不到任何广播,除非广播带有 FLAG_INCLUDE_STOPPED_PACKAGES 标志,而默认所有系统广播都是 FLAG_EXCLUDE_STOPPED_PACKAGES 的,所以就没法通过系统广播自启动了。所以 Android3.1 之后
(1)、应用程序无法在安装后自己启动
(2)、没有 ui 的程序必须通过其他应用激活才能启动,如它的 Activity、Service、Content Provider 被其他应用调用。
存在一种例外,就是应用程序被 adb push you.apk/system/app/ 下是会自动启动的,不处于 stopped 状态。
具体说明见:
http://developer.android.com/about/versions/android-3.1.html#launchcontrols
http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html
3、adb 发送 BOOT_COMPLETED
我们可以通过
1
|
adb
shell
am
broadcast
-
a
android
.
intent
.
action
.
BOOT_COMPLETED
|
命令发送 BOOT_COMPLETED 广播,而不用重启测试机或模拟器来测试 BOOT_COMPLETED 广播,这条命令可以更精确的发送到某个 package,如下:
1
|
adb
shell
am
broadcast
-
a
android
.
intent
.
action
.
BOOT_COMPLETED
-
c
android
.
intent
.
category
.
HOME
-
n
package_name
/
class_name
|
Centos6.8下设置gitlab服务开机自启动,关闭防火墙开机自启动
一. 本地虚拟机的缺点
本地虚拟机虽然也可以模拟服务器用,但电脑不能保证24小时都是开机的,一旦关机,服务就失去了连接,你将看到我们之前搭建的gitlab服务出现如下画面:
本地电脑7*24小时不关机是不现实的,但是可以保证,一旦虚拟机启动,服务也响应启动,而不是服务启动了,发现防火墙开机自启了,本地去访问gitlab时被拦截了,当关闭防火墙,又发现gitlab服务不是开机自动启动的,还需要手动敲一遍命令:
gitlab-ctl start
这显然是不合理的,下面我们谈谈如何开闭防火墙开机自启动和设置gitlab开机自启动
二. 关闭防火墙开机自启动
网上有很多方法来查看防火墙的状态:
service iptables status
输入上面命令,查看防火墙的状态,如看到ACCEPT、REJECT,说明防火墙服务正在运行
当然也可以使用chkconfig命令查看系统服务的运行级信息
这里需要说明一下chkconfig的6个运行级别:
0 停机,机器关闭(千万不要把initdefault设置为0)
1 单用户模式,类似windows下的安全模式
2 多用户模式,但是没有NFS支持
3 完整的多用户模式,是标准的运行级
4 一般不用,在一些特殊情况下可以用它做一些事情、例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置
5 就是X11,进入到 X Window系统了
6 重启(千万不要把initdefault设置为6)
如何永久性的关闭防火墙?使用如下命令:
chkconfig iptables off
其实这时候使用 service iptables status查看,还可以看到服务在运行
chkconfig却显示服务都是关闭状态,这是为什么?
因为chkconfig不是立即自动禁止或者启动某一个服务,它只是简单地改变了符号链接
reboot重启一下,再查看防火墙状态,发现禁止开机自启动生效了
3. 设置gitlab服务开机自启动
/etc/rc.d/rc.local,这是设置开机自启动的配置文件。这个文件会在用户登陆之前读取,这个文件中写入了什么命令,在每次系统启动时都会执行一次
那么直接写入gitlab启动命令: gitlab-ctl start行不行?建议要写全路径
当你不知道gitlab-ctl全路径的时候,用whereis命令可以查看:
这里为什么会有两个路径,可以 ls -l 查看一下
恍然大悟,原来/usr/bin开头的全路径是指向/opt开头的软连接,这时候将目标链接写入配置文件即可
参考文章
Centos6 设置软件开机自动启动
chkconfig命令
详解centos6和centos7防火墙的关闭
CentOS7如何设置开机自启动程序、开机自启动脚本?
文章目录
- 1、把启动程序的命令添加到/etc/rc.d/rc.local文件中
- CentOS7.9里的`/etc/rc.local`文件
- 2、把写好的启动脚本添加到目录`/etc/rc.d/init.d/`,然后使用命令`chkconfig`设置开机启动。
- 示例1:设置自启动mysql
- 示例2:设置自启动httpd
- 3、把启动程序的命令添加到`/etc/rc.d/rc.sysinit` 文件中
- 示例:设置自启动apache
- 我们的prj
- 尝试方案1
在CentOS系统下,主要有三种方法设置自己安装的程序开机启动。
1、把启动程序的命令添加到/etc/rc.d/rc.local文件中
/etc/rc.d/rc.local
用于添加开机启动命令/etc/rc.local
是/etc/rc.d/rc.local
的软连接
比如下面的是设置开机启动httpd。
打开rc.local文件,在文件最后添加/usr/local/apache/bin/apachectl start
:
#!/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.
#该脚本将在所有其他初始化脚本之后执行。
#如果你不想做完整的 Sys V 风格的初始化东西,你可以把你自己的初始化东西放在这里。
touch /var/lock/subsys/local
/usr/local/apache/bin/apachectl start
CentOS7.9里的/etc/rc.local
文件
[root@localhost init.d]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to prevIoUs versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
[root@localhost init.d]#
2、把写好的启动脚本添加到目录/etc/rc.d/init.d/
,然后使用命令chkconfig
设置开机启动。
chkconfig 功能说明:检查,设置系统的各种服务。
语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]
--add 添加服务
--del 删除服务
--list 查看各服务启动状态
示例1:设置自启动MysqL
将MysqL启动脚本放入所有脚本运行目录 /etc/rc.d/init.d
中
cp /lamp/MysqL-5.0.41/support-files/MysqL.server /etc/rc.d/init.d/MysqLd
改变所有者
chown root.root /etc/rc.d/init.d/MysqLd
所有用户都可以执行,但只有root可以修改
chmod 755 /etc/rc.d/init.d/MysqLd
将MysqLd 放入linux启动管理体系中
chkconfig --add MysqLd
查看全部服务在各运行级状态
chkconfig --list MysqLd
只要运行级别3启动,其他都关闭
chkconfig --levels 245 MysqLd off
示例2:设置自启动httpd
把httpd的脚本写好后放进/etc/rc.d/init.d/
目录
chkconfig --add httpd
chkconfig httpd on
命令即设置好了开机启动。
3、把启动程序的命令添加到/etc/rc.d/rc.sysinit
文件中
脚本/etc/rc.d/rc.sysinit
,完成系统服务程序启动,如系统环境变量设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等
示例:设置自启动apache
echo "/usr/local/apache2/bin/apachectl start" >> /etc/rc.d/rc.sysinit
上述命令相当于在/etc/rc.d/rc.sysinit
文件末尾追加/usr/local/apache2/bin/apachectl start
,当然也可手动打开文件编辑
参考文章:CentOS设置程序开机自启动的方法
我们的prj
尝试方案1
我们要让/root/kyai/exec_container.sh
这个脚本在centos7开机的时候自启动
先备份一下/etc/rc.d/rc.local
cp /etc/rc.d/rc.local /etc/rc.d/rc.local.bak
然后再执行
echo "/root/kyai/exec_container.sh" >> /etc/rc.d/rc.local
然后查看一下,已经写进去了
然后我们重启一下centos看看这个脚本能不能把服务拉起来
试了一下,我又给这个命令加了输出日志文件的功能,参考文章:Linux bash输出带日期时间的日志文件
发现这个脚本压根没运行。。。。。(不知道是不是我操作姿势有误,我是以root用户进来的)
linux下的软件开机自动启动方案
docker安装之后,已经安装了开机启动service文件,但还需要在设置下开机启动,才能在服务器重启时自动启动
systemctl enable docker
kubelet开机自动启动
systemctl enable kubelet
今天的关于如何使一个openwrt下的软件开机自启动和openwrt 自启动的分享已经结束,谢谢您的关注,如果想了解更多关于Android 应用如何开机自启动、自启动失败原因、Centos6.8下设置gitlab服务开机自启动,关闭防火墙开机自启动、CentOS7如何设置开机自启动程序、开机自启动脚本?、linux下的软件开机自动启动方案的相关知识,请在本站进行查询。
本文标签: