Linux嵌入式相关项目走到最后很难避开要开机自启一些应用程序或者脚本等,最近也在帮助同事作这个事情,之前本身玩板子的时候都是较为随便的在/etc/rc.local中添加就能够了,可是项目的话仍是走标准一些,不只为了本身之后的维护,也为了之后同事的维护。因此分享下面的文章linux
推荐:shell
启动脚本和service、chkconfig:http://blog.csdn.net/taiyang1987912/article/details/41698817ubuntu
转自:http://blog.csdn.net/listener_ri/article/details/45128569bash
当前系统环境为:Linux mint mate 17.1(基于ubuntu14.04的衍生版)网络
首先架构
/etc/rc*.d文件夹中的脚本文件的连接目标为:/etc/init.d文件夹下的脚本(*为系统运行级别‘数字’和字母:S,系统优先运行rcS.d目录下的脚本,而后运行rcN.d下的脚本)app
/etc/inittab: inittab为系统的PID=1的进程,决定这系统启动调用哪些启动脚本文件ide
在运行级别对应的文件夹中,您能够看到许多文件名以“S##”和“K##”起始的启动脚本连接测试
init 进程将以“start”为参数,按文件名顺序执行全部以“S##”起始的脚本。脚本名称中的数字越小,它将被越早执行。网站
例如在 “/etc/rc2.d/”文件夹中,“S13gdm”文件名中的数字小于“S23xinetd”,“S13gdm”将比“S23xinetd”先执行。
若是一个脚本连接,以“K##”起始,表示它将以“stop”参数被执行。若是相应服务没有启动,则不执行该脚本。
你能够手动运行带有如下参数的启动脚本,来控制系统服务。
start 启动
stop 中止
restart 重启
例如:
/etc/rc2.d/K20powernowd start
有 时您并不清楚当前运行级别,该运行级别下未必有相应脚本;并且此类脚本的前三位字符并不固定,不便于记忆。
这时,您能够直接使用 “/etc/init.d/”文件夹中的启动脚本(由于“/etc/rcX.d/”中的启动脚本都是连接到“/etc/init.d/”文件夹下相应脚本)
具体都有那些系统服务脚本,能够看另外一篇文章:《ubuntu中init.d文件夹中经常使用系统服务脚本》
upstart任务适用于runlevel<5的脚本和程序,service任务适用于runlevel<=5的任务,cron任务则不必定,而startup通常工做在runlevel=5,也就是桌面级。
对于普通用户而言,你的桌面级应用应该使用startup,服务级应用(好比某些功能性的软件脚本)应该使用service,常规性配置可使用cron,而与启动顺序有关的最好使用upstart。
Linux加载后, 它将初始化硬件和设备驱动, 而后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。一般状况下,修改放置在
目录下的脚本文件,可使init自动启动其它程序。例如:编辑/etc/rcS.d/rc.local(也就是/etc/rc.local,由于rcS.d连接目标为/etc) 文件(该文件一般是系统最后启动的脚本),
在文件最末加上一行“xinit”或“startx”,能够在开机启动后直接进入X-Window。
用户登陆时,bash先自动执行系统管理员创建的全局登陆script :
/ect/profile(大多在此文件中设置环境变量,它是整个桌面环境使用的一个shell进程,也就是登陆shell)
>>>在linux中的shell能够分为:登陆shell,非登陆交互式shell,非登陆非交互式shell(执行shell脚本),
>>>具体能够查看另外一篇文章:《 linux中各个shell配置文件的做用域和启动时间 》
而后bash在用户起始目录下按顺序查找三个特殊文件中的一个:
但只执行最早找到的一个。所以,只需根据实际须要在上述文件中加入命令就能够实现用户登陆时自动运行某些程序(相似于DOS下的Autoexec.bat)。
退出登陆时,bash自动执行我的的退出登陆脚本
例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,则在每次退出登陆时自动执行 “tar” 命令备份 *.c 文件。
Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户能够经过crontab 命令来创建、修改、删除这些命令文件。
例如,创建文件crondFile,内容为“00 9 23 Jan * HappyBirthday”,运行“crontabcronFile”命令后,每当元月23日上午9:00系统自动执行“HappyBirthday”的程序(“*”表示无论当天是星期几)。
定时执行命令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.
方式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 。
另一种是
方式3:systemd