Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225014
  • 博文数量: 22
  • 博客积分: 1676
  • 博客等级: 上尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-31 10:48
文章分类

全部博文(22)

文章存档

2011年(8)

2010年(1)

2009年(1)

2008年(12)

我的朋友

分类: LINUX

2008-09-02 14:27:02

 
今日单位的一台服务器上面跑的软件突然不能正常启动了,查看了诸多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)没有正常启动。

显示结果如下:

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,显示如下:

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版本先
 
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 6.10
Release:        6.10
Codename:       edgy

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吧,毕竟它可能是下一代的启动管理程序。

参考资料:


 
阅读(1557) | 评论(0) | 转发(0) |
0

上一篇:chmsee不能运行

下一篇:man 2 pdf shell script

给主人留下些什么吧!~~