linux

系統

Service Delay

我的 Node.js app 是用 PM2 啟動,MySQL 是放在 Docker。

因為 PM2 啟動 app 比 Docker 快,所以會出現錯誤訊息(資料庫連線錯誤)。

請 ChatGPT 幫忙,延後 PM2 啟動執行 app,方法如下:

先建一個 timer 檔案: /etc/systemd/system/myservice-delay.timer

內容:

[Unit]
Description=Delay start for myservice

[Timer]
OnBootSec=60s
Unit=myservice.service

[Install]
WantedBy=timers.target

這個 Timer 的意思是:開機後 60 秒,才觸發 myservice.service

啟用 Timer:

sudo systemctl daemon-reload
sudo systemctl enable myservice-delay.timer

但有一個地方要注意,原本用 PM2 產生的 service 要停止開機啟動。

sudo systemctl disable myservice
系統

使用 awk 擷取 Log 檔的特定欄位

想要從 Apache 的 log 檔擷取特定欄位。

下面是問 ChatGPT 的回答:

// 要使用 awk 指令從 Apache 日誌中提取第一欄(IP 地址)和第四欄(時間戳)的數據
// 可以使用以下命令
// '{print $1, $4}' 意思是印出第一欄和第四欄
$ awk '{print $1, $4}' log_file

// 不過,第四欄的時間戳會包含方括號,你可以用 awk 去除方括號,使輸出更乾淨
// gsub(/\[|\]/, "", $4) 是 awk 的一個函數調用,用來替換 $4 欄中的方括號 [ 和 ]
// 將其替換為空字符串 ""
$ awk '{gsub(/\[|\]/, "", $4); print $1, $4}' log_file

下面是我自己修改後的寫法:

// 欄位之間的 \t 是 tab 的意思
$ awk '{gsub(/\[|\]/, "", $4); gsub(/\"/, "", $7); print $1 "\t" $4 "\t" $7 "\t" $9 "\t" $10}' log_file
返回頂端