2010-01-31 89 views
1

我在Rails項目中有一個ruby腳本。該腳本包含environment.rb,以便Rails得到加載等。然後,它監聽另一個服務器的TCP套接字上的數據,解析它以保持mysql數據庫處於最新狀態。調試過時的紅寶石進程

我使用守護進程gem可以輕鬆啓動和停止進程。 Iv的劇本在生產中運行並沒有問題,但現在已經過時了。守護進程控制文件表示進程仍在運行,當我執行ps -ef時進程正在顯示,monit也認爲該進程正常運行。但是,數據庫沒有得到更新(如果我在另一個進程中再次運行腳本,數據庫正確更新)。

我一直在使用GDB調試用什麼過程中的問題是通過運行sudo gdb /usr/local/bin/ruby 25395試過,這個輸出是

GNU gdb 6.8-debian 
Copyright (C) 2008 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "x86_64-linux-gnu"... 
/usr/local/bin/ruby: No such file or directory. 
Attaching to process 25395 
Reading symbols from /usr/bin/ruby1.8...(no debugging symbols found)...done. 
Reading symbols from /usr/lib/libruby1.8.so.1.8...(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/libruby1.8.so.1.8 
Reading symbols from /lib/libpthread.so.0... 
(no debugging symbols found)...done. 
[Thread debugging using libthread_db enabled] 
[New Thread 0x2b7decb08d30 (LWP 25395)] 
Loaded symbols for /lib/libpthread.so.0 
Reading symbols from /lib/libdl.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib/libdl.so.2 
Reading symbols from /lib/libcrypt.so.1... 
(no debugging symbols found)...done. 
Loaded symbols for /lib/libcrypt.so.1 
Reading symbols from /lib/libm.so.6...(no debugging symbols found)...done. 
Loaded symbols for /lib/libm.so.6 
Reading symbols from /lib/libc.so.6... 
(no debugging symbols found)...done. 
Loaded symbols for /lib/libc.so.6 
Reading symbols from /lib/ld-linux-x86-64.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib64/ld-linux-x86-64.so.2 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/thread.so... 
(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/thread.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/etc.so...(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/etc.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/stringio.so... 
(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/stringio.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/syck.so...(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/syck.so 
Reading symbols from /lib/libnss_compat.so.2... 
(no debugging symbols found)...done. 
Loaded symbols for /lib/libnss_compat.so.2 
Reading symbols from /lib/libnsl.so.1...(no debugging symbols found)...done. 
Loaded symbols for /lib/libnsl.so.1 
Reading symbols from /lib/libnss_nis.so.2... 
(no debugging symbols found)...done. 
Loaded symbols for /lib/libnss_nis.so.2 
Reading symbols from /lib/libnss_files.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib/libnss_files.so.2 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/socket.so... 
(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/socket.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/nkf.so...(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/nkf.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/bigdecimal.so... 
(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/bigdecimal.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/iconv.so...(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/iconv.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/strscan.so... 
(no debugging symbols found)...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/strscan.so 
Reading symbols from /usr/lib/ruby/gems/1.8/gems/hpricot-0.8.1/lib/fast_xs.so...done. 
Loaded symbols for /usr/lib/ruby/gems/1.8/gems/hpricot-0.8.1/lib/fast_xs.so 
Reading symbols from /usr/lib/ruby/gems/1.8/gems/json-1.1.9/ext/json/ext/parser.so...done. 
Loaded symbols for /usr/lib/ruby/gems/1.8/gems/json-1.1.9/ext/json/ext/parser.so 
Reading symbols from /usr/lib/ruby/gems/1.8/gems/json-1.1.9/ext/json/ext/generator.so...done. 
Loaded symbols for /usr/lib/ruby/gems/1.8/gems/json-1.1.9/ext/json/ext/generator.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/racc/cparse.so...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/racc/cparse.so 
Reading symbols from /usr/lib/ruby/gems/1.8/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/tmailscanner.so...done. 
Loaded symbols for /usr/lib/ruby/gems/1.8/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/tmailscanner.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/openssl.so...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/openssl.so 
Reading symbols from /lib/libssl.so.0.9.8...done. 
Loaded symbols for /lib/libssl.so.0.9.8 
Reading symbols from /lib/libcrypto.so.0.9.8...done. 
Loaded symbols for /lib/libcrypto.so.0.9.8 
Reading symbols from /lib/libz.so.1...done. 
Loaded symbols for /lib/libz.so.1 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/digest.so...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/digest.so 
Reading symbols from /usr/lib/ruby/1.8/x86_64-linux/fcntl.so...done. 
Loaded symbols for /usr/lib/ruby/1.8/x86_64-linux/fcntl.so 
Reading symbols from /usr/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so...done. 
Loaded symbols for /usr/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so 
Reading symbols from /usr/lib/libmysqlclient.so.15...done. 
Loaded symbols for /usr/lib/libmysqlclient.so.15 
0x00002b7dec86df10 in read() 
    from /lib/libc.so.6 

這表明,這個問題是與MySQL連接。可能有幾個小時沒有任何數據。我相信這可能會導致進程與Mysql斷開連接?但是如果這確實發生了,我會盡管當腳本確實開始再次獲取數據時,會拋出一個異常,這會阻止腳本運行,提示monit重新啓動它。

回答

0

我解決了這個問題,實際上是斷開TCP連接。即使重新連接後,套接字上的gets方法也會掛起。我使用的解決方案是在gets方法中放置一個超時模塊。例如,

timeout(10) do  
    line = socket.gets 
end 

這會在腳本超時結束後引發異常。 Monit可以自動重新啓動它。