這兩天遇上了一個問題,可惜解決晚了,導致場景服務(wù)器的一個未知隱患要留到下次外部測試才能查出來了.
一個通過ssh連接啟停指定服務(wù)器程序的管理程序,其中一組啟動的程序發(fā)生崩潰后無法dumpcore文件,但是改用手動啟動的方式程序則會在崩潰后dumpcore.
在shell環(huán)境下檢測core文件大小設(shè)置:
$ulimit -c
unlimited
讓管理程序讀取core文件大小設(shè)置:
o = machine.StartApp('ulimit -c');
print(o.readline());
$python test.py
0
設(shè)置值是0,不是預期的.但是在終端看到的卻是unlimited.其中ulimit -c的初始設(shè)置是寫在.bash_profile里的.
很幸運的看到.bashrc里提到2種類型的shells:login shell,interactive shell.其中l(wèi)ogin shell加載.bash_profile,interactive shell加載.bashrc.
管理程序連接到機器后,沒有使用tty或者bash,因為不需要交互,同時,管理程序執(zhí)行命令的方式是bash -c,所以管理程序沒有執(zhí)行.bash_profile中的設(shè)置,以致于子進程繼承的core文件大小設(shè)置不符合期望.
其中的一個解決辦法是在每個執(zhí)行命令前添加 ulimit -c unlimited,但是這寫得有點死.另一個解決辦法是發(fā)現(xiàn)bash -c每次都會加載.bashrc,將core文件大小設(shè)置寫入.bashrc便可.
問題看起來解決了,但是我覺得這里面的一個細節(jié)和man對不上:
An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to
terminals
管理程序執(zhí)行命令時候的bash -c表示的是non-interactive shell,應該不會加載.bashrc才是,類似于用crontab運行的腳本就不會加載.bashrc,但是管理程序執(zhí)行命令的時候設(shè)置竟然生效了...求解.
.
PS:最近2個月沒寫blog,好忙.................
posted on 2010-12-20 23:07
LOGOS 閱讀(2160)
評論(2) 編輯 收藏 引用