Linux 將命令模式下執行程式,所輸出的紀錄引導到檔案

以java為例,

System.out.println("log ...")

可以在console下看到結果, 但我們若需要未來分析使用, 就必須導到檔案.

執行時可以增加以下參數

java  -jar xxx.jar   > a.out  2>&1

以前常常搞不清楚, 現在也還是一樣不太懂, 沒差拉, 這樣就可以用了, 然後 tail -f a.out 就可以在螢幕看到即時訊息, 事後也能將a.out保存起來呢.

docker安裝peertube影音平台

peertube是開源的串流影音平台, 很適合拿來管理私人影音檔案.

本文安裝的先決條件是:
已備有httpd反向代理, 以及lets encrypt ,
因此不使用peertube官方自帶的webserver與cerbot, 以免造成管理上的困擾

帳號密碼: guest/guest

https://how.itworks.ltd/iammis/技術文章/HowTo/10034_(docker)安裝peertube.txt

linux hostname lookup

主機名稱很重要, hostname , 我們公司有台老鼎新tiptop erp主機 安裝的是 redhat enterprise 4 .


tiptop的架構我簡單的敘述, client端連線到這台 server , 這台server會辨識client 端ip , 再將資料以xml方式, 反向傳回去client端的接收程式, 該接收程式(genero desktop client , gdc )會把xml資料轉成UI介面 , 方便讓使用者使用.

可是呢, 每次使用者執行程式, 都必須進行license檢驗, 以及進行 host name lookup 查詢資料庫的ip在哪, 我說的是每次執行程式哦, 都要進行資料庫主機在哪的查訪動作, 實在是有夠怪的設計 , 這10多年來我困擾很久, 終於有點了解了
為何要了解這個, 因為使用者執行程式, 常常導致跑一隻程式, 光是等待程式冒出來就要等2分鐘... 我們早就知道是lookup的問題, 但找不出真正的解法, 以下是lookup的解決切入點

nsswitch 可以指定優先查 /etc/hosts 或是 dns 或是 winbind 

但這款老舊版本有個怪怪的bug, 設定了相關的lookup , 總是沒用, 就是會查詢失敗導致時間過久使用者憤怒, 我無意間看到有人寫了可以這樣檢查

getent hosts 資料庫主機名稱
或是
strace  getent hosts 資料庫主機名稱

我發現ap主機查詢很快, 但是查詢db主機超慢, 於是加上strace檢查問題 , 我加上去之後看不懂, 於是就多看了幾次,

這指令居然神奇的自己解決查詢過久的問題, 多執行幾次就變快了.... @@ 傻眼

擴容xfs,ext4(不使用lvm)

linux vm我很很老派的喜歡用純粹的ext4 , xfs 檔案系統, 但是時常遇到磁碟空間不足的問題,
此時讓VM 伺服器加大空間, 再服用以下兩個指令:

1. 安裝擴容軟體
yum install cloud-utils-growpart -y
2. 執行擴容(xfs只能增大, 不能減少)
growpart /dev/sdb 1
代表讓/dev/sdb1擴充到最大
3. 生效 
假設/dev/sdb1 mount 到 /mnt/docker
以下指令可以立即生效
xfs_growfs -d /mnt/docker

mail出現好奇怪的log ".... rip=::1, lip=::1, secured, session" problem

有時候出現就一大堆, 最後出現too many open files , 有夠怪異, 只好讓限制 imap 與 pop3 只 listen 特定的 ip (ipv4) , 這樣就可以避掉疑似ipv6嘗試入侵的問題, 我自己是覺得可能是系統與dovecot之前某段出了狀況.
請修改 /etc/dovecot/conf.d/10-master.conf

service imap-login {
   inet_listener imap {
     address = x.x.x.x y.y.y.y
     #port = 143
   }
   inet_listener imaps {
     address = x.x.x.x y.y.y.y
     #port = 993
     #ssl = yes
   } 
}
service pop3-login {
   inet_listener pop3 {
     address = x.x.x.x y.y.y.y
     #port = 110
   }
   inet_listener pop3s {
     address = x.x.x.x y.y.y.y
     #port = 995
     #ssl = yes
   }
} 


docker container啟動管理supervisord設定心得

supervisord是常用的docker啟動管理程序, 通常我們都把一大堆服務寫進去supervisord.conf, 我最近弄的docker mail server (綁定AD) , 常常遇到container重啟時(docker restart) , supervisord裡面的service會出現already started字樣, 爬了文, 好像是這個參數搞的鬼, startsecs , 官網解釋如下

The total number of seconds which the program needs to stay running after a startup to consider the start successful (moving the process from the STARTING state to the RUNNING state)

也就是說這些service啟動成功後, supervisord預設會等個1秒才移除STARTING狀態, 但有可能造成service本身誤判, 誤以為已啟動,又再啟動一次, 所以service會重複跑個幾次 , 甚至有時候就再起不能了.

目前測試結果可以修改兩個參數, 一個是startsecs=0(立即更新成running狀態) , 另一個是startretries=0(重複啟動次數)
我是決定只改 startsecs=0 , 果然就沒出現already started字樣


ps. 這只是我個人測試自己docker mail server的心得, 沒有多次驗證

1 2 3 ... 7