Linux 將命令模式下執行程式,所輸出的紀錄引導到檔案
以java為例,
System.out.println(“log …”)
可以在console下看到結果, 但我們若需要未來分析使用, 就必須導到檔案.
執行時可以增加以下參數
java -jar xxx.jar > a.out 2>&1
以前常常搞不清楚, 現在也還是一樣不太懂, 沒差拉, 這樣就可以用了, 然後 tail -f a.out 就可以在螢幕看到即時訊息, 事後也能將a.out保存起來呢.
以java為例,
System.out.println(“log …”)
可以在console下看到結果, 但我們若需要未來分析使用, 就必須導到檔案.
執行時可以增加以下參數
java -jar xxx.jar > a.out 2>&1
以前常常搞不清楚, 現在也還是一樣不太懂, 沒差拉, 這樣就可以用了, 然後 tail -f a.out 就可以在螢幕看到即時訊息, 事後也能將a.out保存起來呢.
peertube是開源的串流影音平台, 很適合拿來管理私人影音檔案.
本文安裝的先決條件是:
已備有httpd反向代理, 以及lets encrypt ,
因此不使用peertube官方自帶的webserver與cerbot, 以免造成管理上的困擾
帳號密碼: guest/guest
https://docs.kafeiou.pw/iammis/技術文章/HowTo/10034_(docker)安裝peertube.txt
1.
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
##$(lsb release -cs) 試圖找出ubuntu對應版本 ,
##或是到這查https://download.docker.com/linux/ubuntu/dists/
sudo apt-get install docker-ce docker-ce-cli containerd.io
2. 自訂存放目錄
修改 /lib/systemd/system/docker.service
從
ExecStart=/usr/bin/docker daemon -H fd://
改成
ExecStart=/usr/bin/docker daemon --data-root <自訂目錄> -H fd://
重啟 docker
systemctl stop docker
systemctl daemon-reload
systemctl start docker
完成
主機名稱很重要, 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檢查問題 , 我加上去之後看不懂, 於是就多看了幾次,
這指令居然神奇的自己解決查詢過久的問題, 多執行幾次就變快了…. @@ 傻眼
一直以來QNap 純粹用來當作儲存設備, 花俏功能我都直接關掉, 只開放iSCSI , NFS 與CIFS , 而且限定內部ip才能連線(Qlocker遠離我).
但是最近公司停電,開機後, 我發現有一個插槽壞了, 換硬碟也顯示無硬碟狀態, 有夠麻煩的, 手忙腳亂了一番, 不小心造成QNap不正常關機(不要笑我啊).
悲劇來了, windows 的主要網域主控站, 與Sharepoint Server直接GG 慘, 而Linux也有狀況例如這個網站也GG, 好險Linux自帶工具, 告訴我可以執行xfs修復, 至少可以開機成功, windows就不多說了, 直接拿備份重建, 但是一波好幾折, 辛酸阿.
先說 linux 的docker server中 mariadb server container也再起不能了, 哭,
於是我另開一個可啟動的 mariadb container , 把有問題的volume中的額外table放到乾淨的mysql目錄中, 想像這樣或許可以救起來其他資料庫, 一開始啟動成功, show database, show tables也看到, 真是高興, 但是要select tables時候, 出現錯誤訊息
mysql error unknown table engine
又哭… 找了好久終於找到可以在my.cnf中加上以下參數, 但是我的container沒有mapping到/etc中的my.cnf , 於是又搞了一次, 才可以進行修復.
innodb_force_recovery = 1 or innodb_force_recovery = 4
終於完成了, 我的網站修復完成.
— added 2021/5/10 —-
後來發現以上innodb_force_recovery參數只能暫時使用, 需要趕緊使用mysqldump把資料備份下來,
mysqldump --user=root -h 127.0.0.1 --password --lock-tables --databases 資料庫名稱 > xxx.sql 或 mysqldump --user=root -h 127.0.0.1 --password --databases 資料庫名稱 > xxx.sql
然後再重新跑一個全新 server 把相關資料倒回去, 才能真正高枕無憂
例如 docker 安裝 mariadb service , 要記得不要開放到internet
iptables -I DOCKER 1 -i <對外網卡代號> -p tcp --dport 3306 -j DROP
我很個很老派的人,喜歡用純粹的ext4 、 xfs 檔案系統, 但是時常遇到磁碟空間不足的問題。
若要擴容,可以服用以下指令:
1. 先安裝擴充軟體
yum install cloud-utils-growpart -y
2. 到虛擬伺服器上讓虛擬硬碟增大
3. 到虛擬主機裡面,讓虛擬硬碟容量變大(支援ext4、xfs,xfs只能增大, 不能減少),
growpart /dev/sdb 1
代表讓/dev/sdb這個硬碟擴充到最大
4. 到虛擬主機裡面,讓磁碟分區生效
xfs
--
以下指令可以立即生效指令後面接掛載目錄
xfs_growfs -d /mnt/docker
ext4
--
resize2fs /dev/sdb1
最近遇到一個搞笑的烏龍, 公司匯出的oracle dmp檔案, 進行還原測試的時候, 無法匯入到測試區, 錯誤訊息為:
IMP-00037: Character set marker unknown
經過爬文,有可能是字元編碼不一致, 網路上提供的解方是:
cat xxx.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
這樣可以查出oracle系統的字元編號, 再以字元編號查詢編碼名稱
SQL> select nls_charset_name(to_number('上個指令查出的字元編號','xxxx')) from dual;
這樣的指令應該是可以查出來, 若查不出來就可能是檔案損毀或是我這樣的烏龍,
我匯出備份的時候, 加上tar以及bz2壓縮
所以原檔案變成 xxx.dmp.bz2, 完全看不出來有tar , 因此解壓的時候我忘記了只有解bz2 , 解出來的xxx.dmp 其實不是原本的dmp檔案, 還需要解開tar這個動作, 哈哈
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的心得, 沒有多次驗證