tag: init upstart centos6.x 自启动 initctl event
CentOS6开始转用Upstart代替以往的init.d/rcX.d的线性启动方式。
upstart的概念就不科普了,简单介绍下:
upstart可以在以下情况start\stop服务:
1.runlevel改变时
2.收到事件时
3.startup,shutdown
在这之前先介绍下initctl。initctl可以做什么?
man initctl 可以看到:管理员可以使用initctl对upstart init deamon进行操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@aaaaa ~]# initctl help Job commands: start Start job.
stop Stop job.
restart Restart job.
reload Send HUP signal to job.
status Query status of job.
list List known jobs.
Event commands: emit Emit an event.
Other commands: reload-configuration Reload the configuration of the init daemon.
version Request the version of the init daemon.
log -priority Change the minimum priority of log messages from the init daemon
usage Show job usage message if available.
help display list of commands
For more information on a command, try `initctl COMMAND --help'.
|
我常用的主要是启动、停止、重启、list。
下面使用initctl list看看又哪些任务在运行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@aaaa ~]# initctl list mcu start/running, process 1639 rc stop/waiting tty (/dev/tty3) start/running, process 3123 tty (/dev/tty2) start/running, process 3121 tty (/dev/tty6) start/running, process 3129 tty (/dev/tty5) start/running, process 3127 tty (/dev/tty4) start/running, process 3125 plymouth-shutdown stop/waiting control-alt- delete stop/waiting
rcS-emergency stop/waiting readahead-collector stop/waiting kexec-disable stop/waiting quit-plymouth stop/waiting rcS stop/waiting prefdm start/running, process 3116 init- system -dbus stop/waiting
readahead stop/waiting splash-manager stop/waiting start-ttys stop/waiting readahead-disable-services stop/waiting rcS-sulogin stop/waiting serial stop/waiting |
举个例子:mcu start/running, process 1639
可以看到mcu这个任务处于start并且running状态,并且进程号是1639.
那如何做一个自启动呢?了解完上面之后,下面就很简单了。
1
2
3
4
5
|
[root@aaaaa ~]# cd /etc/init [root@aaaaa init]# ls control-alt- delete .conf mcu.conf quit-plymouth.conf rcS-emergency.conf readahead.conf splash-manager.conf
init- system -dbus.conf plymouth-shutdown.conf rc.conf rcS-sulogin.conf readahead-disable-services.conf start-ttys.conf
kexec-disable.conf prefdm.conf rcS.conf readahead-collector.conf serial.conf tty.conf |
在/etc/init下可以看到有很多 .conf文件,每一个conf都是一个任务。
我们只要在这里添加一个conf,就可以注册一个任务。
下面的例子,我希望在runlevel为2345的时候,确保/tmp/test.sh一直在执行。
那么conf这样写:
1
2
3
4
5
6
7
|
[root@aaaaa init]# cat mcu.conf start on runlevel 2 start on runlevel 3 start on runlevel 4 start on runlevel 5 respawn exec /tmp/test.sh |
解释:
respawn 是让任务反复启动
exec可以用来执行文件,如果要在conf里面写脚本,可以使用script...end script格式,这里就不做举例了。
到这里,就已经写好了conf。你可以使用initctl reload-configuration来重新加载任务。然后在initctl list中查看任务,是否mcu已经添加进去了。
如果没有添加进去,请检查conf中是否有语法错误。
如果添加进去了,任务应该是stop的状态,那么可以使用initctl start mcu来启动任务。
但是这样似乎有点麻烦,就把以上的都做成一个脚本吧:
1
2
3
4
5
6
|
#!/bin/bash echo -e "start on runlevel 2\nstart on runlevel 3\nstart on runlevel 4\nstart on runlevel 5\nrespawn\nexec /tmp/test.sh" > /etc/init/mcu.conf
initctl reload-configuration initctl list initctl start mcu |
执行脚本,就完成了添加conf和启动任务的操作。
以上只是一个简单的conf例子,如果想要在更多条件下启动、停止等等各种操作,可以参考man。
前面说到了initctl可以发送event,让任务启动,conf这样写:
1
2
3
4
|
start on evsolohac script echo “solohac~~~~~” >>/tmp/solohac.txt end script |
让这个任务启动的命令如下:
1
|
initctl emit evsolohac |