如何使Linux系统上的程序开机后自动运行

转载 2007年09月24日 22:22:00

http://soft.zdnet.com.cn/software_zone/2007/0909/497347.shtml

 

Linux有自己一套完整的启动体系,抓住了Linux启动的脉络,Linux的启动过程将不再神秘。

阅读之前建议先看一下附图。

 

本文中假设inittab中设置的init tree为:

/etc/rc.d/rc0.d

/etc/rc.d/rc1.d

/etc/rc.d/rc2.d

/etc/rc.d/rc3.d

/etc/rc.d/rc4.d

/etc/rc.d/rc5.d

/etc/rc.d/rc6.d

/etc/rc.d/init.d

 

1. 关于Linux的启动

 

init是所有进程之父

init读取/etc/inittab,执行rc.sysinit脚本

(注意文件名是不一定的,有些unix甚至会将语句直接写在inittab中)

rc.sysinit脚本作了很多工作:

 

 

init $PATH 
config network 
start swap function 
set hostname 
check root file system, repair if needed 
check root space 
....

 

rc.sysinit根据inittab执行rc?.d脚本

Linux是多用户系统,getty是多用户与单用户的分水岭

在getty之前运行的是系统脚本

 

2. 关于rc.d

 

所有启动脚本放置在 /etc/rc.d/init.d下

rc?.d中放置的是init.d中脚本的链接,命名格式是:

S

K

S开始的文件向脚本传递start参数

K开始的文件向脚本传递stop参数

number决定执行的顺序

 

3. 启动脚本示例

 

这是一个用来启动httpd的 /etc/rc.d/init.d/apache 脚本:

 

 

代码: 
#!/bin/bash 

source /etc/sysconfig/rc 
source $rc_functions 

case "" in 
        start) 
                echo "Starting Apache daemon..." 
                /usr/local/apache2/bin/apachectl -k start 
                evaluate_retval 
                ;; 

        stop) 
                echo "Stopping Apache daemon..." 
                /usr/local/apache2/bin/apachectl -k stop 
                evaluate_retval 
                ;; 

        restart) 
                echo "Restarting Apache daemon..." 
                /usr/local/apache2/bin/apachectl -k restart 
                evaluate_retval 
                ;; 

        status) 
                statusproc /usr/local/apache2/bin/httpd 
                ;; 
                 
        *) 
                echo "Usage:  " 
                exit 1 
                ;;

esac可以看出他接受start,stop,restart,status参数

 

然后可以这样建立rc?.d的链接:

 

 

代码: 
cd /etc/rc.d/init.d && 
ln -sf ../init.d/apache ../rc0.d/K28apache && 
ln -sf ../init.d/apache ../rc1.d/K28apache && 
ln -sf ../init.d/apache ../rc2.d/K28apache && 
ln -sf ../init.d/apache ../rc3.d/S32apache && 
ln -sf ../init.d/apache ../rc4.d/S32apache && 
ln -sf ../init.d/apache ../rc5.d/S32apache && 
ln -sf ../init.d/apache ../rc6.d/K28apache4. 关于rc.local

 

经常使用的 rc.local 则完全是习惯问题,不是标准。

各个发行版有不同的实现方法,可以这样实现:

 

 

代码: 
touch /etc/rc.d/rc.local 
chmod +x /etc/rc.d/rc.local 
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc1.d/S999rc.local && 
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc2.d/S999rc.local && 
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc3.d/S999rc.local && 
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc4.d/S999rc.local && 
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc5.d/S999rc.local && 
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc6.d/S999rc.local5. 关于bash启动脚本 

/etc/profile 
/etc/bashrc 
~/.bash_profile 
~/.bashrc

 

是bash的启动脚本

 

一般用来设置单用户的启动环境,也可以实现开机单用户的程序,但要明确他们都是属于bash范畴而不是系统范畴。

 

他们的具体作用介绍如下:

 

/bin/bash这个命令解释程序(后面简称shell)使用了一系列启动文件来建立一个运行环境:

 

/etc/profile

/etc/bashrc

~/.bash_profile

~/.bashrc

~/.bash_logout

每一个文件都有特殊的功用并对登陆和交互环境有不同的影响。

/etc/profile 和 ~/.bash_profile 是在启动一个交互登陆shell的时候被调用。

/etc/bashrc 和 ~/.bashrc 是在一个交互的非登陆shell启动的时候被调用。

~/.bash_logout 在用户注销登陆的时候被读取

 

一个交互的登陆shell会在 /bin/login 成功登陆之后运行。一个交互的非登陆shell是通过命令行来运行的,如[prompt] $/bin/bash。一般一个非交互的shell出现在运行shell脚本的时候。之所以叫非交互的shell,是因为它不在命令行上等待输入而只是执行脚本程序。 

如何在linux嵌入式开发板上开机自动运行用户应用程序(转载)

开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的S...
  • wangw89
  • wangw89
  • 2011年05月29日 10:00
  • 6159

Android实现开机自动运行程序

有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service。怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以“Don't call me, I'll call y...
  • hmg25
  • hmg25
  • 2011年03月30日 10:54
  • 10225

linux上电自动运行运用程序

应用程序放到/etc/profile中自己开机启动的程序,但是不能自启动,需要在超级终端敲回车,"Please press Enter to activate this console",等待用户输入...
  • u011425939
  • u011425939
  • 2017年05月12日 09:00
  • 407

ubuntu添加开机自动运行程序方法

UBUNTU添加开机自动启动程序方法 1. 开机启动时自动运行程序    Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置    文件继续引导过程...
  • love3s
  • love3s
  • 2012年04月07日 13:25
  • 10721

Linux系统中设置开机自动运行的两种方法

有时可能会需要在重启时或者每次系统启动时运行某些命令或者脚本。我们要怎样做呢?本文中我们就对此进行讨论。 我们会用两种方法来描述如何在 CentOS/RHEL 以及 Ubuntu 系统上做到重启或者系...
  • oqqSSH
  • oqqSSH
  • 2017年12月17日 14:44
  • 97

让你的python程序开机自启动

前段时间写的那个python桌面时钟的小程序, 今天突发奇想, 能不能让他开机自动启动呢   开始菜单启动项实现 1 创建快捷方式 2 直接将快捷方式复制/粘贴到开始菜单启动文件夹 开始菜单-->...
  • gatieme
  • gatieme
  • 2014年03月22日 10:59
  • 19851

如何使Linux系统上的程序开机后自动运行(补)

linux服务添加 1编写一个脚本,用来启动你的程序,或者停止你的程序,可参考 参考脚本的服务是smartd,也可以参考/etc/init.d目录下的脚本写,另外也可以找程序的编译目录下面找,比如...
  • martin2350
  • martin2350
  • 2011年09月16日 22:17
  • 413

linux如何实现开机加载完图形界面后自动运行自己写的一个程序

方法:(1)进入HOME目录,使用命令:#cd $HOME,HOME是当前用户目录的环境变量    (2)使用命令#ls -al 列出当前目录下的所有文件和目录,可以看到一个.config目录,这是...
  • jianglei_love
  • jianglei_love
  • 2016年06月01日 21:55
  • 2001

在tiny6410开发板上运行自己的qt4.7程序,并设置为开机启动

将可执行文件拷贝到SD卡,插入开发板。然后将开发板/sdcard 目录中的可执行文件拷贝到/www目录下,也可以通过nfs方式 例 cp /sdcard/dianzirili  /www 然后进入...
  • zhang2531
  • zhang2531
  • 2016年03月03日 11:07
  • 722

程序开机自动运行的方法

  Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉,实际上,在Windows XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的...
  • liuzijing688
  • liuzijing688
  • 2005年06月30日 16:44
  • 4837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何使Linux系统上的程序开机后自动运行
举报原因:
原因补充:

(最多只允许输入30个字)