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