找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

upstart引起的故障

2009-12-20 13:16| 发布者: admin| 查看: 54| 评论: 0|原作者: 夙瑶


今日单位的一台服务器上面跑的软件突然不能正常启动了,查看了诸多log,也没有找到头绪。联想到之前进行的操作,除了重启一遍机器外,没有做过任何操作,莫非。。。。。。

环境:ubuntu 6.10
公司软件版本:xxx-2.2
症状:进入系统后,无法正常执行xxx程序的启动关闭脚本,log并无报错。

由于公司软件需要启动4个init脚本,但是ubuntu从6.10开始已经不再使用/etc/inittab文件控制服务,而是使用upstart。经查看后发现,/etc/event.d/下面的4个脚本(xxx_init,xxx_scan,xxx_grab, xxx_web)没有正常启动。
显示结果如下:
[email=123@host1:/etc/init.d$]123@host1:/etc/init.d$[/email]
pstree (异常情况)
init─┬─apache2───11*[apache2]
├─atd
├─dd
├─events/0
├─events/1
├─6*[getty]
├─khelper
├─kirqd
├─klogd
├─ksoftirqd/0
├─ksoftirqd/1
├─kswapd0
├─kthread─┬─aio/0
│ ├─aio/1
│ ├─ata/0
│ ├─ata/1
│ ├─hda_codec
│ ├─kacpi_notify
│ ├─kacpid
│ ├─kblockd/0
│ ├─kblockd/1
│ ├─khubd
│ ├─kjournald
│ ├─kpsmoused
│ ├─kseriod
│ ├─2*[pdflush]
│ ├─reiserfs/0
│ ├─reiserfs/1
│ ├─scsi_eh_0
│ ├─scsi_eh_1
│ ├─scsi_eh_2
│ ├─scsi_eh_3
│ └─shpchpd
├─migration/0
├─migration/1
├─nmbd
├─ntpd
├─openvpn
├─saa7133[0]
├─saa7133[2]
├─saa7134[1]
├─smbd───smbd
├─sshd─┬─sshd───sshd───bash───pstree
│ └─sshd───sshd───bash───bash
├─syslogd
├─udevd
├─watchdog/0
├─watchdog/1
└─xinetd
这四个初始化程序没有启动,相关的程序肯定木有办法正常运行啊。

这可咋办捏,登录到另外一台机器上看看,也是装得ubuntu 6.10,显示如下:
[email=123@host2:/etc/event.d$]123@host2:/etc/event.d$[/email]
pstree (正常情况)
init─┬─apache2───10*[apache2]
├─atd
├─dd
├─events/0
├─events/1
├─6*[getty]
├─khelper
├─kirqd
├─klogd
├─ksoftirqd/0
├─ksoftirqd/1
├─kswapd0
├─kthread─┬─aio/0
│ ├─aio/1
│ ├─ata/0
│ ├─ata/1
│ ├─hda_codec
│ ├─kacpi_notify
│ ├─kacpid
│ ├─kblockd/0
│ ├─kblockd/1
│ ├─khubd
│ ├─kjournald
│ ├─kpsmoused
│ ├─kseriod
│ ├─2*[pdflush]
│ ├─reiserfs/0
│ ├─reiserfs/1
│ ├─scsi_eh_0
│ ├─scsi_eh_1
│ ├─scsi_eh_2
│ ├─scsi_eh_3
│ └─shpchpd
├─xxx_init─┬─xxx_inittab───su───xxx_grab───16*[{xxx_grab}]
│ └─tee
├─xxx_inittab_init─┬─xxx_inittab_init───su───xxx_init
│ └─tee
├─xxx_inittab_scan─┬─xxx_inittab_scan───su───xxx_scan───5*[{xxx_scan}]
│ └─tee
├─xxx_inittab_web─┬─xxx_inittab_web───su───perl
│ └─tee
├─migration/0
├─migration/1
├─nmbd
├─ntpd
├─openvpn
├─saa7133[0]
├─saa7133[2]
├─saa7134[1]
├─smbd───smbd
├─sshd─┬─sshd───sshd───bash───pstree
│ └─sshd───sshd───bash
├─syslogd
├─udevd
├─watchdog/0
├─watchdog/1
└─xinetd

这就奇怪了,为啥重启一遍机器后就无法正常运行程序了呢?

为了找到原因,首先查看OS版本先

[email=123@host2:~$]123@host2:~$[/email]
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 6.10
Release: 6.10
Codename: edgy
[email=123@host1:~$]123@host1:~$[/email]
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 7.10
Release: 7.10
Codename: gutsy
乖乖,咋升级到7.10了捏?
不过这下倒是提供了解决的思路,肯定是upstart版本不同造成的问题。
上网查了一下,发现6.10的upstart是0.2.7-7.2版本,而7.10已经是0.3.8-2,相差了一代人啊。
那这两个版本差异到底在哪里呢?
1.Command不同
#initctl [options]... Command ARG...
其中的command可以是:
0.2.7-7.2
0.3.8-2
start JOB
start JOB
stop JOB
stop JOB
status JOB
status JOB
list
list
triggerEVENT
emit EVENT
jobs
jobs
events
events
shutdown
version


log-riority
主要的不同如黑体字所示,但最主要的区别是红色的部分。

2.binary文件指向不同
0.2.7-7.2中,/sbin/start,/sbin/stop/和/sbin/status都是指向/sbin/start;而0.3.8-2这三个命令都指向了/sbin/initctl
3. job文件格式不同
0.3.8-2的job文件格式,必须出现exec或者script stanza。
而0.2.7-7.2无此要求。
4. start on和stop on的条件不同
0.3.8-2的start on和stop on的条件可以是以下几种
startup
runlevel X
stopped job
started job
而0.2.7-7.2中支持的shutdown并不包括在内。
这下就找到了原因,原来那台有问题的机器升级后/etc/event.d下面的job文件都没有更新,还是保持原来的格式,因此执行initctl start xxx-init之类的命令会返回initctl: Unknown job。必须修改job文件的格式才行,
将原来的respawn /sbin/xxx_inittab.sh改为
respawn
exec /sbin/xxx_inittab.sh
并且将原来的stop on shutdown改为
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6即可。
重新启动后发现问题解决了。有兴趣的同学好好研究一下upstart吧,毕竟它可能是下一代的启动管理程序。
参考资料:
http://www.linux.com/feature/125977
http://upstart.ubuntu.com/getting-started.html






最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 19:16 , Processed in 0.272211 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部