LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2165|回复: 31

怎样在系统启动时在后台启动一个自己的程序?

[复制链接]
发表于 2006-11-27 09:42:08 | 显示全部楼层 |阅读模式
怎样在系统启动时在后台启动一个自己的程序?
这个平台有关么?

我想在Linux系统启动的时候,在后台启动一个我自己编写的程序,我把那个程序放在
init.d 目录下或 rc.d 或 rc2.d的目录下都不行。
系统启动后,都见不到我的程序在运行。

求助,这是怎么回事?要修改什么启动文件么?要创建什么链接么
发表于 2006-11-27 10:11:47 | 显示全部楼层
修改/etc/inittab,把程序的路径写上例如(/root/test)后台的话再加个&,就是/root/test &
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-27 10:26:44 | 显示全部楼层
好的,谢谢,我试试。。。
回复 支持 反对

使用道具 举报

发表于 2006-11-27 10:33:46 | 显示全部楼层
像Redhat/Fedora,Debina都有自己的可定制的自启动文件,如Redhat是/etc/rc.local.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-27 10:34:48 | 显示全部楼层
inittab是早就看过,也略知它的作用,不过不是很了解里面那些语句,
请看我的 /etc/inittab(不是PC系统)

# Boot-time system configuration/initialization script.
# This is run first except when booting in single-user mode.
#
::sysinit:/etc/init.d/rcS

# /bin/sh invocations on selected ttys
#
# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:/bin/sh
# Start an "askfirst" shell on /dev/tty2
tty2::askfirst:/bin/sh

#
# Example how to put a getty on a modem line.
#ttyS2::respawn:/sbin/getty -x0 -s 57600 ttyS2

# Stuff to do before rebooting
::ctrlaltdel:/bin/umount -a -r > /dev/null 2>&1
::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1


请问,:: 是什么意思啊?有空的话,假如你明白上面的一些语句,如
::ctrlaltdel:/bin/umount -a -r > /dev/null 2>&1
::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1
可否解释一下?呵呵,先谢了!

hoho_zhao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-27 10:35:58 | 显示全部楼层
我的没有 rc.local,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-27 10:37:00 | 显示全部楼层
惨,怎么我的代码变成 一个  问号+face
回复 支持 反对

使用道具 举报

发表于 2006-11-27 10:51:51 | 显示全部楼层
/etc/inittab文件中每个登记项的结构都是一样的,共分为以冒号“:”分隔的4个字段。具体如下:
      identifier :  run_level  :  action  :  process
其中,各字段以及与其相关的说明如下:
identifier  登记项标识符,最多为4个字符。用于惟一地标识/etc/inittab文件中的每一个登记项

run_level  系统运行级,即执行登记项的init级别。用于指定相应的登记项适用于哪一个运行级,即在哪一个运行级中被处理。如果该字段为空,那么相应的登记项将适用于所有的运行级。在该字段中,可以同时指定一个或多个运行级,其中各运行级分别以数字0.1.2.3.4.5.6或字母 a、b、c表示,且无需对其进行分隔。

action    动作关键字。用于指定init(M)命令或进程对相应进程(在“process”字段定义)所实施的动作。具体动作包括:
  1、boot:只有在引导过程中,才执行该进程,但不等待该进程的结束;当该进程死亡时,也不重新启动该进程。
  2、bootwait:只有在引导过程中,才执行该进程,并等待进程的结束:当该进程死亡时,也不重新启动该进程。实际上,只有在系统被引导后,并从单用户方式进入多用户方式时,这些登记项才被处理;如果系统的默认运行级设置为2(即多用户方式),那么这些登记项在系统引导后将马上被处理。
  3、initdefault:指定系统的默认运行级。系统启动时,init将首先查找该登记项。如果存在init将据此决定系统最初要进入的运行级。具体来说,init将指定登记项“run_level"字段中的最大数字(即最高运行级)为当前系统的默认运行级;如果该字段为空,那么将其解释为“0123456”,并以“6”作为默认运行级。如果不存在该登记项,那么init将要求用户在系统启动时指定一个最初的运行级。
  4、off:如果相应的进程正在运行,那么就发出一个警告信号,等待20秒后,再通过杀死信号强行终止该进程。如果相应的进程并不存在那么就忽略该登记项。
  5、once:启动相应的进程,但不等待该进程结束便继续处理/etc/inittab文件中的下一个登记项;当该进程死亡时,init也不重新启动该进程。注意:在从一个运行级进入另一个运行级时,如果相应的进程仍然在运行,那么init就不重新启动该进程。
  6、ondemand:与“respawn”的功能完全相同,但只用于运行级为a、b或c的登记项。
  7、powerfail:只在init接收到电源失败信号时执行相应的进程,但不等待该进程结束。
  8、powerwait:只在init接收到电源失败信号时执行相应的进程,并在继续对/etc/inittab文件进行任何处理前等待该进程结束。
  9、respawn:如果相应的进程还不存在,那么init就启动该进程,同时不等待该进程的结束就继续扫描/etc/inittab文件;当该进程死亡时,init将重新启动该进程。如果相应的进程已经存在,那么init将忽略该登记项并继续扫描/etc/inittab文件。
  10、sysinit:只有在启动或重新启动系统并首先进入单用户时,init才执行这些登记项。而在系统从运行级1-6进入单用户方式时,init并不执行这些登记项。"action”字段为“sysinit”的登记项在“run_level”字段不指定任何运行级。
  11、wait:启动进程并等待其结束,然后再处理/etc/inittab文件中的下一个登记项。

  
  process   所要执行的shell命令。任何合法的shell语法均适用于该字段。


刚刚学到,觉得不错就写了出来大家来分享一下,呵呵。 ops:
回复 支持 反对

使用道具 举报

发表于 2006-11-27 10:54:18 | 显示全部楼层
Post by hoho_zhao
我的没有 rc.local,呵呵


这个文件是像Redhat/Fedora/CentOS才有的,并不是所有发行版本都有的。

Debian下是/etc/init.d/bootmisc.sh
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-27 10:59:06 | 显示全部楼层
非常感谢,我现在就试试,比如我想启动 /etc/rc.d/test

我就在 /etc/inittab 中添加如下语句:

:::/etc/inittab
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表