Linux嵌入式相关项目走到最后很难避开要开机自启一些应用程序或者脚本等,最近也在帮助同事做这个事情,以前自己玩板子的时候都是较为随便的在/etc/rc.local中添加就可以了,但是项目的话还是走标准一些,不仅为了自己以后的维护,也为了以后同事的维护。所以分享下面的文章

推荐:

启动脚本和service、chkconfig:http://blog.csdn.net/taiyang1987912/article/details/41698817

转自:http://blog.csdn.net/listener_ri/article/details/45128569

当前系统环境为:Linux mint mate 17.1(基于ubuntu14.04的衍生版)

首先

/etc/rc*.d文件夹中的脚本文件的链接目标为:/etc/init.d文件夹下的脚本(*为系统运行级别‘数字’和字母:S,系统优先运行rcS.d目录下的脚本,然后运行rcN.d下的脚本)

/etc/inittab: inittab为系统的PID=1的进程,决定这系统启动调用哪些启动脚本文件

1.Linux系统主要通过以下步骤启动

  1. 启动Boot Manager
  2. 加载系统内核,启动init进程, init进程是Linux的根进程,所有的系统进程都是它的子进程。
  3. init进程读取“/etc/inittab”文件中的信进入inittab中预设的运行级别,按顺序运行该运行级别对应文件夹(init*.d)下的脚本。脚本通常以“start”参数启动,并指向一个系统中的程序。通常情况下,“/etc/rcS.d/”目录下的启动脚本首先被执行,然后是“/etc/rcN.d/”目录。例如您设定的运行级别为3,那么它对应的启动目录为“/etc/rc3.d/”。
  4. 根据“/etc/rcS.d/”文件夹中对应的脚本启动Xwindow服务“xorg”      Xwindow为Linux下的图形用户界面系统。
  5. 启动登录管理器,等待用户登录

1.1.系统服务

在运行级别对应的文件夹中,您可以看到许多文件名以“S##”和“K##”起始的启动脚本链接

init 进程将以“start”为参数,按文件名顺序执行所有以“S##”起始的脚本。脚本名称中的数字越小,它将被越早执行。

例如在 “/etc/rc2.d/”文件夹中,“S13gdm”文件名中的数字小于“S23xinetd”,“S13gdm”将比“S23xinetd”先执行。

如果一个脚本链接,以“K##”起始,表示它将以“stop”参数被执行。如果相应服务没有启动,则不执行该脚本。

1.2.手动控制服务

你可以手动运行带有以下参数的启动脚本,来控制系统服务。
start 启动
stop 停止
restart 重启

例如:
/etc/rc2.d/K20powernowd start
有 时您并不清楚当前运行级别,该运行级别下未必有相应脚本;而且此类脚本的前三位字符并不固定,不便于记忆。

这时,您可以直接使用 “/etc/init.d/”文件夹中的启动脚本(因为“/etc/rcX.d/”中的启动脚本都是链接到“/etc/init.d/”文件夹下相应脚本)

具体都有那些系统服务脚本,可以看另一篇文章:《ubuntu中init.d文件夹中常用系统服务脚本》

2.Ubuntu系统架构关于启动项大致分为四类,每一类都分为系统级和用户级

  • 第一类upstart,或者叫job,由init管理,配置文件目录/etc/init,~/.init
  • 第二类叫service,由rc.d管理,配置文件目录/etc/init.d,以及/etc/rc.local文件
  • 第三类叫cron,由contab管理,使用crontab进行配置
  • 第四类叫startup,由xdg管理,配置文件目录/etc/xdg/autostart,以及~/.config/autostart

upstart任务适用于runlevel<5的脚本和程序,service任务适用于runlevel<=5的任务,cron任务则不一定,而startup一般工作在runlevel=5,也就是桌面级。

对于普通用户而言,你的桌面级应用应该使用startup,服务级应用(比如某些功能性的软件脚本)应该使用service,常规性配置可以使用cron,而与启动顺序有关的最好使用upstart。

2.1. 开机启动时自动运行程序

Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在

  • /etc/rcN.d
  • /etc/rcS.d

目录下的脚本文件,可以使init自动启动其它程序。例如:编辑/etc/rcS.d/rc.local(也就是/etc/rc.local,因为rcS.d链接目标为/etc) 文件(该文件通常是系统最后启动的脚本),

在文件最末加上一行“xinit”或“startx”,可以在开机启动后直接进入X-Window。

2.2. 登录时自动运行程序

用户登录时,bash先自动执行系统管理员建立的全局登录script :

/ect/profile(大多在此文件中设置环境变量,它是整个桌面环境使用的一个shell进程,也就是登录shell

>>>在linux中的shell可以分为:登录shell,非登录交互式shell,非登录非交互式shell(执行shell脚本),

>>>具体可以查看另一篇文章:《 linux中各个shell配置文件的作用域和启动时间 》

然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:

  • /.bash_profile、
  • /.bash_login、
  • /.profile,

但只执行最先找到的一个。因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。

2.3. 退出登录时自动运行程序

退出登录时,bash自动执行个人的退出登录脚本

  • /.bash_logout。

例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,则在每次退出登录时自动执行 “tar” 命令备份 *.c 文件。

2.4. 定期自动运行程序

Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。

例如,建立文件crondFile,内容为“00 9 23 Jan * HappyBirthday”,运行“crontabcronFile”命令后,每当元月23日上午9:00系统自动执行“HappyBirthday”的程序(“*”表示不管当天是星期几)。

2.5. 定时自动运行程序一次

定时执行命令at 与crond 类似(但它只执行一次):命令在给定的时间执行,但不自动重复。at命令的一般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令:

$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
Job 1 at 2000-11-09 12:00

2000-11-09 12:00时候自动发一标题为“Have a lunch”,内容为plan.txt文件内容的邮件给Roger.

3.Ubuntu下添加开机启动脚本

方式1:rc.local

Ubuntu开机之后会执行/etc/rc.local文件中的脚本,所以我们可以直接在/etc/rc.local中添加启动脚本。

当然要添加到语句:exit 0 前面才行。

方式2:rcN.d

如果要添加为开机启动执行的脚本文件,可先将脚本复制或者软连接到/etc/init.d/目录下,然后用:update-rc.d xxx defaults NN命令(NN为启动顺序),将脚本添加到初始化执行的队列中去。

注意如果脚本需要用到网络,则NN需设置一个比较大的数字,如98 。

  • 将脚本设为可执行权限,并拷贝至/etc/init.d
  • 在/etc/init.d路径下执行update-rc.d script-name start 98 5 . 注:98为顺序,5为rc5.d,符号.不要忘记
  • 这样会在会在/etc/rc5.d/下面创建1个符号链接,有必要在脚本的前段加一些provider/start-default等说明,否则报警,在Ubuntu上测试成功
  • 在am4378上没有测试成功 T_T.

另外一种是

  • 将脚本设为可执行
  • 在rcN.d下执行ln ../init.d/script-name S99script
  • 在Ubuntu上没有成功,不知为何

方式3:systemd

转载于:https://www.cnblogs.com/aaronLinux/p/6860478.html

[启动]Linux启动流程rcN.d rcS.d rc.local等相关推荐

  1. Linux启动流程rcN.d rcS.d rc.local等

    1 环境 当前系统环境为:Linux mint mate 17.1(基于ubuntu14.04的衍生版) 备注: /etc/rc*.d文件夹中的脚本文件的链接目标为:/etc/init.d文件夹下的脚 ...

  2. linux系统编码启动,Linux启动流程介绍

    一. 内核镜像Izmage被bootloader装载到内存中.zImage的入口代码是自引导程序.包含一些初始化代码.第一条指令在head.S文件中.解压内核,然后调用call_kernel启动vml ...

  3. arm-linux启动,linux启动流程arm

    linux启动分析(1)---bootloader启动内核过程 void (*startkernel)(int zero, int arch, unsigned int params_addr) = ...

  4. uboot启动linux内核流程分析(三)

    uboot bootz命令流程图 Uboot启动linux内核是使用bootz命令,bootz是如何启动linux内核?uboot的生命周期是怎么终止的?linux是如何启动? 启动linux内核的时 ...

  5. Linux启动流程之ROM-CODE

    1.从哪里开始? 下图是AM335X核心板和功能框图: AM335X核心板的存储信息如下: AM335X核心板运行linux系统,在这里提出一个问题: 上电后指令从哪里开始执行? DDR or EMM ...

  6. linux启动mysql_【数据库】MySQL数据库入门学习

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  7. linux中自动启动不了怎么办,linux:/etc/rc.local 不能自动启动问题

    前段时间安装LNMP环境,配置/etc/rc.local的时候配置了启动mysql.nginx.php以及关闭防火墙,可结果重启了七八次还是自启动不了后来终于找到原因了 看下图: /etc/rc.lo ...

  8. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 ...

  9. 理解Linux系统/etc/init.d目录和/etc/rc.local脚本

    本文英语版本来自:http://www.ghacks.net/2009/04/04/get-to-know-linux-the-etcinitd-directory/ 以下内容是作者自己的翻译版本,如 ...

最新文章

  1. 服务器 上传文件 杀毒,一种实现文件上传网站后自动进行杀毒的方法及系统
  2. 先验概率,后验概率,最大似然估计,最大后验概率
  3. C、C++和C#区别概述
  4. SpringBoot报错couldn‘t check if tables are already present using metadata:
  5. 人工智能(1)---从0开始搭建产品经理的AI认知体系
  6. Realm Swift
  7. 如何去除Android应用中的广告
  8. opencv使用tensorflow ssd迁移学习 pb文件转pbtxt文件出错
  9. 哪一类功率放大电路效率最高_高频放大电路原理详解及应用电路汇总
  10. 腾讯cdn设置 php,wordpress网站使用腾讯CDN的最佳缓存配置
  11. 巴拿赫空间上的复变函数
  12. PKU红的HSB值,以及THU紫的HSB值。北大红,清华紫
  13. 用Android Studio编写简易闹钟(一)
  14. Java 并发核心机制
  15. 批量更改Excel数据透视表字段汇总方式
  16. 公路车sava和Java_入门之作 意外惊喜 SAVA追风5.0公路车 评测
  17. 按键精灵手机版 参数个数不匹配
  18. 微信小程序:和平精英吃鸡捏脸数据助手微信小程序源码下载支持激励视频
  19. BlueLotus_XSSReceiver——XSS数据接收工具的使用
  20. Winows Server 2019 激活正确姿势!

热门文章

  1. 【智能商务】学习财务分析,看这10张思维导图就够啦
  2. 可兼容CS4344的国产音频数模转换电路,目前已广泛应用于数字通信、DVD音频、汽车音响系统
  3. ios 各种动画机制
  4. 机器学习和深度学习的主要术语(中英)
  5. 快速下载“阿里云镜像网站“Centos各个版本 全流程
  6. Bootstrap导航和导航条
  7. 【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯
  8. 程序人生—谈安全测试的重要性
  9. Nginx白名单设置
  10. 有趣的黑掉卫星Hack-A-Sat CTF比赛——模拟卫星视角beckley