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

   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之前运行的是系统脚本

  . 关于rc.d

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

  rc?.d中放置的是init.d中脚本的链接,

  命名格式是:

  S{number}{name}

  K{number}{name}

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

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

  number决定执行的顺序

  3. 启动脚本示例

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

  代码:

  #!/bin/bash

  source /etc/sysconfig/rc

  source $rc_functions

  case "$1" 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: $0 {start|stop|restart|status}"

  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,是因为它不在命令行上等待输入而只是执行脚本程序。

时间: 2024-12-23 03:16:54

使Linux系统上的程序开机后自动运行的相关文章

如何取消软件开机后自动运行

平时安装的软件很多,有时候难免会粗心,在安装的时候没注意,把一些不是很重要的软件在安装的时候设置了"开机后自动运行"这导致了每天电脑开机的时候弹出很多软件. 太烦人了. 那么,针对"软件开机后自动运行"怎么解决呢?相信很多人还不是很清楚吧!西西今天就来教大家怎么去解决这个困扰. 一.软件开机后自动运行,如图: 二.解决方法: 1.打开电脑"开始"菜单,选择运行. 2.在运行中打开"MSCONFIG"后回车 3.在打开的&quo

win7电脑中如何禁止放大镜在开机后自动运行?

  为什么要有放大镜这个功能?可能年轻一点的用户会大呼不理解,也不会使用到这个功能,但是我们不得不正视一个问题,因为越来越多的老年朋友也开始使用电脑,成为"网民",但是相对来说,他们的视力就不如年轻人这么好了,因此,放大镜对于他们来说就是非常有必要的了!不过如果一般都是年轻人使用的话,大家又觉得ghost win7开机自动运行放大镜功能会造成开机速度的减慢的话,那么下面,小编就来具体介绍一下咱们如何禁止放大镜功能开机自动运行! 1.首先,咱们单击开始菜单,然后找到其中的控制面板,并单击

linux-红旗Linux如何让程序开机后自启动?

问题描述 红旗Linux如何让程序开机后自启动? 我现在自己写了一个程序,用的红旗linux,但是我想让系统启动时就运行我的服务,该如何做? 其他系统如redhat,ubuntu都可以直接放到/etc/init.d目录下,但是红旗系统都没有这个目录, 那么红旗自身的系统服务时怎么做到开机自启动的呢?十万火急,有哪位大神能帮忙解决一下, 在下感激不尽 解决方案 /etc/rc.local把你的启动写到这个文件 ,开机会自动调用的

[翻译]现代Linux系统上的栈溢出攻击【转】

转自:http://www.codeweblog.com/%E7%BF%BB%E8%AF%91-%E7%8E%B0%E4%BB%A3linux%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%9A%84%E6%A0%88%E6%BA%A2%E5%87%BA%E6%94%BB%E5%87%BB/ 现代Linux系统上的栈溢出攻击 2012.12.21 - 06:56 - jip 预备知识: 对C语言和 X86_64 汇编语言有基本的了解 ++++++++++++++++++++++++

蓝点Linux系统上DHCP的安装和配置

蓝点Linux 1.0内包括了DHCP软件包,使用它可以用来提供DHCP.在用户安装蓝点Linux时,它会自动安装上去.一般大多数的情况是,Linux作为DHCP服务器而windows 95/98作为DHCP客户.Linux也可以作为DHCP客户,但是用户要安装dhcpcd rpm 软件包.Linux作为DHCP服务器,只需要安装dhcpd rpm 包 (以BluePoint Linux为例) 一.DHCP服务器工作的前提条件: 为了使DHCP服务器为windows机器服务,你可能需要创建一个到

Linux系统上安装MRTG来监控网络流量

Multi Router Traffic Grapher------MRTG是一个监控网络链路流量负载的工具软件,通过snmp协议得到设备的流量信息,并将流量负载以包含PNG格式的图形的HTML 文档方式显示给用户,以非常直观的形式显示流量负载. SNMP(imple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理.随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体

Linux系统上用encfs创建和管理加密文件夹

如果你想使你计算机上的某些信息免于被窥视的话,可以看看这篇文字.保护信息的一种方法就是加密你的home目录,但是一旦你登录系统后,你的home目录下的信息将暴露于外.过去,我已经写过关于怎样在你的系统上使用Cryptkeeper来创建加密的文件夹.Cryptkeeper是一个图形前端,后端是 encfs.encfs允许你创建一个加密的文件夹,然后通过FUSE来挂载作为用户文件系统.在这篇教程里,我会教你怎么在Linux系统上的命令行下面使用encfs工具来创建和管理一个加密的文件夹. 安装enc

Linux系统上架设一台高容量的POP3服务器

POP3(Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到互联网上的邮件服务器和下载电子邮件的电子协议.它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的.本文将介绍如何使用开源软件Procmail和Qpopper,在Linux系统上配置一台可供大量用户使用的POP3服务器. 1.下载Procmail和

Win7系统开机后自动宽带连接怎么设置

  怎么设置一开机就可以自动宽带连接,省去手动点击宽带连接的繁琐步骤?那我们如何设置可以让它自动连接宽带呢?本教程中,安下小编将为大家介绍在win7中设置开机自动连接宽带的方法. Win7电脑开机后自动宽带连接的设置方法 在计算机图标上鼠标右键,弹出的快捷菜单单击"管理"命令 在控制台树(左侧窗口)右击"任务计划程序",打开的菜单单击"创建基本任务" 进入"创建基本任务向导"界面,输入任意名称,单击"下一步"