今日单位的一台服务器上面跑的软件突然不能正常启动了,查看了诸多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 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏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.