有一隻自己寫的Linux程式跑在CentOS 6.6 x86_64上
寫的不好 執行發生錯誤時有可能會當掉
但為了某些原因它必須重新跑起來
[I installed supervisord 3.1.3 on CentOS 6.6 x86_64 to monitor a daemon
and to respawn it automatically whenever necessary]
網路文說supervisord是宣稱唯一不需要搶系統優先控制權的工具
簡單裝起來 只把自己的程式路徑名稱寫入設定檔
用預設值就跑起來了 以為一切就是這麼簡單美妙
[With almost everything in default value, supervisord started to run as exepcted]
第二天進系統檢查一下....
我的程式還苟活著 不錯
咦~ supervisord不見了 它......竟然掛了!
[However, surprise came to me on the second day. Supervisord crashed with no hint at all. It just gone!]
查遍各大論壇 終於看到有人po文表示:
自己的Linux時間常跑掉 用ntp對時後supervisord就無預警的掛了
[Some thread in a forum mentioned a symptom that supervisord crashes after ntpdate adjusted system time]
回測自己主機 確實在手動將時間往前調之後supervisord就閃退了
[I made some tests with manual 'date' command to turn back system time (hours). Oops! Same here: crash... crash... and crash.....]
再經過一番努力搜尋又測了三天 確認這個解法有用
[Luckily I found a solution by the honorable person "Mook-as". And his/hers solution was tested to work on my system]
Use monotonic time for process state tracking by Mook-as
成因大致是supervisord處理time的方式讓它在系統時間倒退後出了問題
(例如某程序在檢查目前時間是否已到執行某工作時 發現自己回到過去了)
把所有time.time()換成monotonic_time()就好了
[For those who having the same problem as I did, apply the patch (I did it by manual input) to replace time.time() then it should work]
連結就是上方的標題
有相同需求的朋友請自行patch你的.py程式吧
[Thank you, Mook-as!]
cheers~
2015年3月15日 星期日
2015年2月24日 星期二
Tomato by Shibby之Access Restriction失效問題
為了限制部分電腦只能於特定時間上網
找了部Tenda N6改成Tomato by Shibby
設定Access Restriction功能後測試 無效!!!
電腦的IP位址已經被鎖了,卻仍可上網
挖出用過沒問題的無線路由器來比對
兩台路由器只有韌體版本不同
新: Tomato Firmware 1.28.0000 MIPSR2-124 K26 Max
舊: Tomato Firmware 1.28.0000 MIPSR2-123 K26 Max
直接將Tenda N6降版到123沒改設定,功能生效了
結論: 目前最新版v1.28 build 124的部分功能有問題
Function "Access Restriction" does not work properly in Tomato by Shibby v1.28 build 124. Pretty sure it's a bug in latest version because the same setting works after I downgrade firmware to v1.28 build 123.
找了部Tenda N6改成Tomato by Shibby
設定Access Restriction功能後測試 無效!!!
電腦的IP位址已經被鎖了,卻仍可上網
挖出用過沒問題的無線路由器來比對
兩台路由器只有韌體版本不同
新: Tomato Firmware 1.28.0000 MIPSR2-124 K26 Max
舊: Tomato Firmware 1.28.0000 MIPSR2-123 K26 Max
直接將Tenda N6降版到123沒改設定,功能生效了
結論: 目前最新版v1.28 build 124的部分功能有問題
Function "Access Restriction" does not work properly in Tomato by Shibby v1.28 build 124. Pretty sure it's a bug in latest version because the same setting works after I downgrade firmware to v1.28 build 123.
2015年2月11日 星期三
kamailio IPv6運作超難搞 (失敗收場)
如果你想試試SIP/IPv6,很可能會搜尋到這篇文章:
Run your own SIP VoIP service on both IPv4 and IPv6
讀來如此簡單而美好
花兩天時間試過裝在以下各VM
CentOS 6.3 x86 (source編譯安裝)
Debian 7.7.0 i386 (source編譯安裝)
Debian 6.0.4 i386 (source編譯安裝)
Debian 7.0.0 i386 (直接從repo用apt-get安裝)
全部同樣的情況:
IPv4幾乎不需要設定就能動
IPv6怎麼設定5060 port都不收封包 (netstat確定有listen)
怎麼送封包給kamailio,只有下面這個系統回應
ICMPv6 Destination Unreachable (Port unreachable)
功力太淺,放棄
(kamailio has put me in hell for two days. too tired now to write in English.....
my suggestion to the ones who got the same ICMPv6 Port unreachable packet is,
"give it up, now!", this is no fun at all)
2014年12月30日 星期二
C# 從 textbox 讀進 IP位址後移除前面0的原始碼
剛好需要用到,不懂C#靠著google瞎矇搞定了,貼給需要的人
如果你讀到 IP位址格式是這樣 "172.016.001.123"
但是你的程式必須轉換成 "172.16.1.123" 格式 (不能帶前面的 "0")
把這段加進去用
(程式碼寫到剛好可用,看不慣的請自行優化)
(只有下面這段我懂,其他 C# 我都不懂)
static class Extensions
{
public static string Right(this string value, int length)
{
return value.Substring(value.Length - length);
}
public static string RemoveUnwantedZeros(this string value)
{
int i;
string subStr="";
bool ignore = false;
for (i = 0; i < value.Length; i++)
{
if (value.Substring(i, 1).Equals("."))
{
subStr += value.Substring(i, 1);
ignore = false;
}
else if (value.Substring(i, 1).Equals("0"))
{
if (ignore)
{
subStr += value.Substring(i, 1);
}
}
else
{
subStr += value.Substring(i, 1);
ignore = true;
}
}
return subStr;
}
}
然後你程式內就可以用這個功能消掉不要的 '0'
realIP = Extensions.RemoveUnwantedZeros(txtIP);
祝福你~
如果你讀到 IP位址格式是這樣 "172.016.001.123"
但是你的程式必須轉換成 "172.16.1.123" 格式 (不能帶前面的 "0")
把這段加進去用
(程式碼寫到剛好可用,看不慣的請自行優化)
(只有下面這段我懂,其他 C# 我都不懂)
static class Extensions
{
public static string Right(this string value, int length)
{
return value.Substring(value.Length - length);
}
public static string RemoveUnwantedZeros(this string value)
{
int i;
string subStr="";
bool ignore = false;
for (i = 0; i < value.Length; i++)
{
if (value.Substring(i, 1).Equals("."))
{
subStr += value.Substring(i, 1);
ignore = false;
}
else if (value.Substring(i, 1).Equals("0"))
{
if (ignore)
{
subStr += value.Substring(i, 1);
}
}
else
{
subStr += value.Substring(i, 1);
ignore = true;
}
}
return subStr;
}
}
然後你程式內就可以用這個功能消掉不要的 '0'
realIP = Extensions.RemoveUnwantedZeros(txtIP);
祝福你~
2014年10月24日 星期五
ASUS RT-N12 D1無法燒Tomato by Shibby磚塊解法
2014.10 買了ASUS RT-N12 D1版 無線路由器
Tomato by Shibby支援的硬體裡 便宜又易買的選擇
拿來當翻牆用的PPtP VPN server
先試了N12內建的 PPtP server
做得很標準 只能連回來存取家裡網路的NAS跟PC
改燒Tomato韌體時 發現沒預期中簡單
網路上大家都說
插電時按住reset十秒左右 就會進入急救(recovery)模式
再用ASUS官網的Firmware Restoration軟體就可以硬燒
試了無數多次 這台完全進不了狀況
乾脆心一橫 改採極端的磚塊製造模式
(以下步驟,不想機器真的變磚塊的請勿模仿)
1.從官網下載原廠韌體
2.登入N12網頁進行韌體更新
3.進行到一半(我是讓它跑到90%確定正在寫flash)
4.拔電...
終於 它掛了!
重開幾次之後 在嘗試用瀏覽器登入192.168.1.1
哈~ Broadcom好樣的
Bootloader裡還有簡易版的web server讓你重燒韌體
就這樣把tomato-K26-1.28.RT-N5x-MIPSR2-123-Max.trx燒進去
重新開機後 番茄icon出現在瀏覽器tab上
大功告成!
Tomato by Shibby支援的硬體裡 便宜又易買的選擇
拿來當翻牆用的PPtP VPN server
先試了N12內建的 PPtP server
做得很標準 只能連回來存取家裡網路的NAS跟PC
改燒Tomato韌體時 發現沒預期中簡單
網路上大家都說
插電時按住reset十秒左右 就會進入急救(recovery)模式
再用ASUS官網的Firmware Restoration軟體就可以硬燒
試了無數多次 這台完全進不了狀況
乾脆心一橫 改採極端的磚塊製造模式
(以下步驟,不想機器真的變磚塊的請勿模仿)
1.從官網下載原廠韌體
2.登入N12網頁進行韌體更新
3.進行到一半(我是讓它跑到90%確定正在寫flash)
4.拔電...
終於 它掛了!
重開幾次之後 在嘗試用瀏覽器登入192.168.1.1
哈~ Broadcom好樣的
Bootloader裡還有簡易版的web server讓你重燒韌體
就這樣把tomato-K26-1.28.RT-N5x-MIPSR2-123-Max.trx燒進去
重新開機後 番茄icon出現在瀏覽器tab上
大功告成!
2014年7月24日 星期四
dhcpd.conf 裡自訂 option 時的格式定義鳥問題
為這個困擾自己三個小時的鳥問題做個記錄:
想用 dhcpd 做更多事的人難免要自訂 options
翻開 dhcpd-options 說明檔會看到一段敘述
The int32 data type specifies a signed 32-bit integer. The uint32 data type specifies an unsigned 32-bit integer. The int16 and uint16 data types specify signed and unsigned 16-bit integers. The int8 and uint8 data types specify signed and unsigned 8-bit integers. Unsigned 8-bit integers are also sometimes referred to as octets.
說得很好,馬上動手改 dhcpd.conf 加入這條定義
(前略)
option tr069_agent_switch code 200 = uint8;
(後略)
啟動 dhcp server
/etc/init.d/dhcpd start
啊~ 錯誤!!!
/var/log/messages 多了這行
Jul 22 02:55:16 cento58 dhcpd: /etc/dhcpd.conf line 13: unknown data type uint8
照說明檔裡的順序逐一試了 int32, unit32, int16....結果是這樣
unknown data type int32
unknown data type uint32
unknown data type int16
unknown data type uint16
unknown data type int8
更怪的是貼錯誤訊息問 google,清一色是 man 檔裡的廢話
直到救星出現 http://ipxe.org/howto/dhcpd
原來要寫成這樣
(前略)
option tr069_agent_switch code 200 = unsigned integer 8;
(後略)
可以跑了....
應該是自己悟性不夠,慚愧又無奈地冷笑兩聲
動起來就好...
想用 dhcpd 做更多事的人難免要自訂 options
翻開 dhcpd-options 說明檔會看到一段敘述
The int32 data type specifies a signed 32-bit integer. The uint32 data type specifies an unsigned 32-bit integer. The int16 and uint16 data types specify signed and unsigned 16-bit integers. The int8 and uint8 data types specify signed and unsigned 8-bit integers. Unsigned 8-bit integers are also sometimes referred to as octets.
說得很好,馬上動手改 dhcpd.conf 加入這條定義
(前略)
option tr069_agent_switch code 200 = uint8;
(後略)
啟動 dhcp server
/etc/init.d/dhcpd start
啊~ 錯誤!!!
/var/log/messages 多了這行
Jul 22 02:55:16 cento58 dhcpd: /etc/dhcpd.conf line 13: unknown data type uint8
照說明檔裡的順序逐一試了 int32, unit32, int16....結果是這樣
unknown data type int32
unknown data type uint32
unknown data type int16
unknown data type uint16
unknown data type int8
更怪的是貼錯誤訊息問 google,清一色是 man 檔裡的廢話
直到救星出現 http://ipxe.org/howto/dhcpd
原來要寫成這樣
(前略)
option tr069_agent_switch code 200 = unsigned integer 8;
(後略)
可以跑了....
應該是自己悟性不夠,慚愧又無奈地冷笑兩聲
動起來就好...
2014年2月10日 星期一
Windows XP對時失敗 (無法取得RPC伺服器)
不曉得當初微軟是怎麼個想法
從第一次裝Windows XP開始
都要處理相同的問題
大致上就是電腦裝好後, 想讓它透過網路自動對時
按下那直觀又簡單的 "立即更新" 後都出現這個錯誤
取得上次同步處理狀態時,發生錯誤。無法取得RPC伺服器。
微軟網站上有個Microsoft MVP, Mr.Ramesh Srinivasan大哥
提供了直接又有效的解法
開啟 "命令提示字元" 視窗
依序打入以下指令
net stop w32time (這行可能會有錯誤,可忽略)
w32tm /register (手動加入Windows Time服務)
net start w32time (啟動Windows Time服務)
再去點 "立即更新" 看看
對時成功!
以上獻給堅持用XP但腦筋又不靈光的老怪物們
(建議各位用台灣本地SNTP server就好, 伺服器填 tick.stdtime.gov.tw)
從第一次裝Windows XP開始
都要處理相同的問題
大致上就是電腦裝好後, 想讓它透過網路自動對時
按下那直觀又簡單的 "立即更新" 後都出現這個錯誤
取得上次同步處理狀態時,發生錯誤。無法取得RPC伺服器。
微軟網站上有個Microsoft MVP, Mr.Ramesh Srinivasan大哥
提供了直接又有效的解法
開啟 "命令提示字元" 視窗
依序打入以下指令
net stop w32time (這行可能會有錯誤,可忽略)
w32tm /register (手動加入Windows Time服務)
net start w32time (啟動Windows Time服務)
再去點 "立即更新" 看看
對時成功!
以上獻給堅持用XP但腦筋又不靈光的老怪物們
(建議各位用台灣本地SNTP server就好, 伺服器填 tick.stdtime.gov.tw)
訂閱:
意見 (Atom)


