March 14,2008

今天遇到一個 ^H的問題,祭出Wireshark來抓蟲

Shell script 寫了個半天,直接在 terminal 執行就可以,放進 cron 變成 cron job ,定時去執行就失敗?或者,交給另外一隻程式來執行就失敗?

不曉得玩 Unix/BSD/Linux 的技客有沒有遇到上述的問題。我也都是一知半解,頭痛醫頭,腳痛醫腳,不過這邊跟大家分享兩個經驗。


[之一:環境變數不一樣]
沒錯,同樣一個帳號,有登入跟沒登入,環境變數是不一樣的!記得當年在寫我的 伊若帝卡 的 bash script 的時候,明明寫好了,在終端機(termianl)的提示符號(command prompt)底下執行都很正常,放到 cron 裡面之後就會有問題(怒)。

當時根本還不知道一些 debug 的參數,例如可以用 -x(鳥哥這篇寫得好!不過,鳥哥比我還小,當年哪有這篇啊 :p),印象中是不斷的把各個變數的值秀出來或者導向一個紀錄檔,最後終於發現,我從那個叫做 LOGNAME 的變數來抓使用者帳號。如果妳已經登入了當然沒問題,壞就壞在,這個變數,如果妳沒有登入,例如用 cron 來跑 script 的時候,這個變數是空值!後來改用 USER 這個變數就可以了。

這個用熬夜(現在大家都說 爆肝 ?)學來的經驗,後來發現蠻有用的,不管是哪個 shell ,哪種 script (甚至 perl 喔),如果遇到 command prompt 可以跑,放進 cron 不能跑的情形,我就會開始用 env 啦 set 啦(perl的 $ENV 啦)之類的把環境變數丟出來看一下。

[之二: ^H的問題]
新鮮熱辣,剛剛才搞定的問題。

今天遇到一個 ^H的問題,以前看人家寫 ^H 都只是搞笑,今天笑不出來了。

(^H就是ctrl h,預設的功能是backspace刪除鍵,剛才試了一下,Windows XP上面開一個command prompt(命令提示字元)也可以試,隨便打幾個字,然後按 ctrl h 就會刪除了。因此有一些 geek 寫 blog 拿來當很假^H^H的刪除鍵。)

我從 solaris 8 用rlogin 登入hp-ux ,執行 echo 跟 cat 某個檔案。以前連到 hp-ux 11.00 那台都很正常,現在又多連一台 hp-ux 11.11 ,結果 echo 的東西會跑出 空白鍵跟 ctrl h 的組合,cat 的東西會被截斷。

我本來以為這是 flow control 的東西,於是用 rlogin flow control 上網撈針,並且上 irc 討救兵。(感謝 jxxxi 建議我試試 rlogin 加上 -8 或 -E,雖然我沒試:p)

後來想想,我有一個成功的對照組,所以就開始想想兩邊有什麼不一樣。Local 這邊是同一台,同一個帳號執行 rlogin ,remote 那邊除了作業系統版本不同(hp-ux 11.00 跟 11.11),還有登入帳號不同。

我開 Wireshark 來抓封包,懷疑是 remote login account shell 的問題。有問題那個帳號預設用的是 sh ,幾百年都正常那個用的是 ksh 。因為客戶很急,所以我就修改我們的 script ,remote login 之後,先執行一次 ksh ,再繼續原本的工作,就一切正常了 XD
(因為帳號是共用的,很多東西不能動,所以我沒有去 chsh)

懶得貼 Wireshark 的圖了,反正有問題的會丟出「空白跟ctrl h」,用 Hex 就是 08 20,用 Decimal 就是 8 32,上網找 hex list 或是 ascii list ,不然直接看這篇這篇有列表。

Posted by ystuan at 樂多Roodo! │17:00 │回應(0)引用(0)自由軟體-網路管理
樂多分類:網路/3C 共同主題:自由軟體 工具:編輯本文
標籤:Wireshark
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/5696847