[转载]ubuntu 启动运行脚本
2013-07-24 09:55
218 查看
原文地址:ubuntu 启动运行脚本作者:fenglee
上网时每次都要输入sudo drcomd: drcomc login. 每次都要这样,有点不爽,所以想着可不可以把命令写在脚本里,让UBUNTU启动的时候自己运行。
本来已经搞定了,过了一段时间,一同学也提出了同样的问题,结果我忘记了怎么做的,好不容易回忆起来了,赶紧记下来:
——————————————————————————————————————————————
先来了解一下UBUNTU的启动管理:(来自:
http://www.zhiweinet.com/linux/)
大致地说明一下目前ubuntu中与init相关的几个目录和应用程序,可以方便后面的论述。这些目录和程序包括:
init
telinit
runlevel
/etc/event.d/
/etc/init.d/
/etc/rcX.d/
前三个是应用程序(注意哦,它们都不是shell脚本),可以理解为是由内核调用的。关于它们的功能,从manpage查看就可以了。我们的重点是后面给出的三个目录。
首先是/etc/event.d/目录,这是upstart的核心,upstart不同于原有的init的地方就在于它引入了event机制。Event 机制通俗的讲就是将所有进程的触发、停止等等都看作event(事件)。/etc/event.d/中就存放了目前upstart需要识别的event。这其中主要有三种rc-default, rcX(x=0,1,…6,S)以及ttyX。这rc-default就类似于那大名鼎鼎的inittab文件,它就是设置默认运行级别的
[注:upstart中实际并没有运行级别的概念,这么称呼是为了init向后的兼容性]。现在你应该知道了ubuntu里没有了inittab文件后该到哪里设置默认运行级别的了吧!cat rc-default一下吧!rcX文件是发生相应运行级别事件(可以注意到event这个词在upstart里真是无处不见啊)时,需要运行程序的脚本,而ttyX则是设置伪终端数目的,也就是你Ctrl+Alt+F(1~6)调出的那个Console。我们以rc2为例,cat rc2:
start on runlevel 2
stop on runlevel [!2]
console output
script
set $(runlevel –set 2 || true)
if [ "{GetProperty(Content)}" != "unknown" ]; then
PREVLEVEL={GetProperty(Content)}
RUNLEVEL=$2
export PREVLEVEL RUNLEVEL
fi
exec /etc/init.d/rc 2
end script
..
不去考虑细节,只要注意到前两行和倒数第二行就可以了。可以看到,rc2文件是定义在发生运行级别2的时候所要执行的东西,核心就是这句:exec /etc/init.d/rc 2。这样,我们就可以自然地过渡到下一个重要的目录,/etc/init.d/了。
你可以ls /etc/init.d/看一下里面的内容,对它有个大致的了解。/etc/init.d/中存放的是服务(services)或者任务(tasks)的执行脚本。可以这么说,只要你安装了一个程序(特别是服务程序daemon),它可以在系统启动的时候运行,那么它必定会在/etc/init.d/中有一个脚本文件。我们还回到上面的rc2文件,它执行了一个exec /etc/init.d/rc 2的命令。也就是说,给/etc/init.d/rc脚本传递了一个参数”2″,让它执行。我们仔细查看一下rc脚本(很长,耐心点),能看到这样的一段:
# Now run the START scripts for this runlevel.
# Run all scripts with the same level in parallel
…….
for s in /etc/rc$runlevel.d/S*
…….
这说明,当给rc脚本传递一个数字参数”X”的时候,它在经过一系列的设置后,将会开始执行/etc/rcX.d/下S开头的脚本。这就过渡到下一个目录/etc/rcX.d/了。
进入/etc/rcX.d/,ls -l /etc/rcX.d/看看有些什么内容?哈哈,没错,都是一些到/etc/init.d/中脚本的符号链接。不同的是它们的开头加上了S和一个数字。熟悉原本init的人应该知道,S表示在启动时运行,数字则表示执行的先后顺序。
这样一来,upstart管理的ubuntu启动过程应该就清楚了。梳理一下:
1,内核启动init
2,init找到/etc/event.d/rc-default文件,确定默认的运行级别(X)
3,触发相应的runlevel事件,开始运行/etc/event.d/rcX
4,rcX运行/etc/init.d/rc,传入参数X
5,/etc/init.d/rc脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本
6,/etc/rcX.d/中的脚本按事先设定的优先级依次启动,直至最后给出登录画面(启动X服务器和GDM)
理解了这些,手动配置开机服务的启动与否就很简单了。Ubutnu默认的启动级别是2,不想启动的程序,只要把相应的符号链接从/etc/rc2.d/中删去即可
———————————————————————————————————————————————
这些个原理最好在自己机子上看看,分析分析就明白了。下面说说我是怎么做的:
在/etc/event.d/中写一个文件,其名为net_login, 内容为:
start on runlevel 2
stop on runlevel [!2]
console output
script
exec /etc/init.d/net_login.sh
end script
然后在/etc/init.d/里写一个文件,名为net_login.sh, 内容为:
drcomd
drcomc login
登录是样。
登出的话,差不多。 其实也不用管登出!
上网时每次都要输入sudo drcomd: drcomc login. 每次都要这样,有点不爽,所以想着可不可以把命令写在脚本里,让UBUNTU启动的时候自己运行。
本来已经搞定了,过了一段时间,一同学也提出了同样的问题,结果我忘记了怎么做的,好不容易回忆起来了,赶紧记下来:
——————————————————————————————————————————————
先来了解一下UBUNTU的启动管理:(来自:
http://www.zhiweinet.com/linux/)
大致地说明一下目前ubuntu中与init相关的几个目录和应用程序,可以方便后面的论述。这些目录和程序包括:
init
telinit
runlevel
/etc/event.d/
/etc/init.d/
/etc/rcX.d/
前三个是应用程序(注意哦,它们都不是shell脚本),可以理解为是由内核调用的。关于它们的功能,从manpage查看就可以了。我们的重点是后面给出的三个目录。
首先是/etc/event.d/目录,这是upstart的核心,upstart不同于原有的init的地方就在于它引入了event机制。Event 机制通俗的讲就是将所有进程的触发、停止等等都看作event(事件)。/etc/event.d/中就存放了目前upstart需要识别的event。这其中主要有三种rc-default, rcX(x=0,1,…6,S)以及ttyX。这rc-default就类似于那大名鼎鼎的inittab文件,它就是设置默认运行级别的
[注:upstart中实际并没有运行级别的概念,这么称呼是为了init向后的兼容性]。现在你应该知道了ubuntu里没有了inittab文件后该到哪里设置默认运行级别的了吧!cat rc-default一下吧!rcX文件是发生相应运行级别事件(可以注意到event这个词在upstart里真是无处不见啊)时,需要运行程序的脚本,而ttyX则是设置伪终端数目的,也就是你Ctrl+Alt+F(1~6)调出的那个Console。我们以rc2为例,cat rc2:
start on runlevel 2
stop on runlevel [!2]
console output
script
set $(runlevel –set 2 || true)
if [ "{GetProperty(Content)}" != "unknown" ]; then
PREVLEVEL={GetProperty(Content)}
RUNLEVEL=$2
export PREVLEVEL RUNLEVEL
fi
exec /etc/init.d/rc 2
end script
..
不去考虑细节,只要注意到前两行和倒数第二行就可以了。可以看到,rc2文件是定义在发生运行级别2的时候所要执行的东西,核心就是这句:exec /etc/init.d/rc 2。这样,我们就可以自然地过渡到下一个重要的目录,/etc/init.d/了。
你可以ls /etc/init.d/看一下里面的内容,对它有个大致的了解。/etc/init.d/中存放的是服务(services)或者任务(tasks)的执行脚本。可以这么说,只要你安装了一个程序(特别是服务程序daemon),它可以在系统启动的时候运行,那么它必定会在/etc/init.d/中有一个脚本文件。我们还回到上面的rc2文件,它执行了一个exec /etc/init.d/rc 2的命令。也就是说,给/etc/init.d/rc脚本传递了一个参数”2″,让它执行。我们仔细查看一下rc脚本(很长,耐心点),能看到这样的一段:
# Now run the START scripts for this runlevel.
# Run all scripts with the same level in parallel
…….
for s in /etc/rc$runlevel.d/S*
…….
这说明,当给rc脚本传递一个数字参数”X”的时候,它在经过一系列的设置后,将会开始执行/etc/rcX.d/下S开头的脚本。这就过渡到下一个目录/etc/rcX.d/了。
进入/etc/rcX.d/,ls -l /etc/rcX.d/看看有些什么内容?哈哈,没错,都是一些到/etc/init.d/中脚本的符号链接。不同的是它们的开头加上了S和一个数字。熟悉原本init的人应该知道,S表示在启动时运行,数字则表示执行的先后顺序。
这样一来,upstart管理的ubuntu启动过程应该就清楚了。梳理一下:
1,内核启动init
2,init找到/etc/event.d/rc-default文件,确定默认的运行级别(X)
3,触发相应的runlevel事件,开始运行/etc/event.d/rcX
4,rcX运行/etc/init.d/rc,传入参数X
5,/etc/init.d/rc脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本
6,/etc/rcX.d/中的脚本按事先设定的优先级依次启动,直至最后给出登录画面(启动X服务器和GDM)
理解了这些,手动配置开机服务的启动与否就很简单了。Ubutnu默认的启动级别是2,不想启动的程序,只要把相应的符号链接从/etc/rc2.d/中删去即可
———————————————————————————————————————————————
这些个原理最好在自己机子上看看,分析分析就明白了。下面说说我是怎么做的:
在/etc/event.d/中写一个文件,其名为net_login, 内容为:
start on runlevel 2
stop on runlevel [!2]
console output
script
exec /etc/init.d/net_login.sh
end script
然后在/etc/init.d/里写一个文件,名为net_login.sh, 内容为:
drcomd
drcomc login
登录是样。
登出的话,差不多。 其实也不用管登出!
相关文章推荐
- ubuntu 启动运行脚本 开机启动脚本
- ubuntu下编写shell脚本运行 启动goagent
- centos/ubuntujenkins.war自启动脚本,Linux启动停止jar包的运行案例
- [转载]Ubuntu下添加开机启动脚本
- ubuntu 锐捷认证 rjsupplicant.sh 无法运行启动脚本
- 【转载】ubuntu 开机启动时自动运行程序
- Ubuntu下添加开机启动脚本(转载)
- ubuntu 启动运行脚本
- 【转载】ubuntu 开机启动时自动运行程序
- 关于Ubuntu运行级别、开机启动脚本的说明
- 【转载】Ubuntu下添加开机启动脚本
- centos/ubuntu jenkins.war 自启动脚本,Linux启动停止jar包的运行案例
- ubuntu增加启动运行脚本
- Ubuntu启动自动运行脚本的方法
- Ubuntu下自动启动终端并运行脚本或命令
- 关于Ubuntu运行级别、开机启动脚本的说明
- ubuntu 修改ssh远程主机名称,mac开机运行命令,静默方式启动virtual box虚拟机,静默执行run脚本
- Ubuntu下自动启动终端并运行脚本或命令
- ubuntu16.04 创建php启动脚本(服务)
- 定时重启机器,重启时运行启动服务脚本