curl 發送 HTTP POST 的指令大概長這樣:
curl -X POST https://my.domain/path/ \ --data 'key=values'
如果要讓 curl 讀取 pipe 進來的資料,則改使用 @-
:
echo /var/log/http/error.log | \ curl -X POST https://my.domain/path/ \ --data '@-'
軟體開發、伺服器和生活瑣事
curl 發送 HTTP POST 的指令大概長這樣:
curl -X POST https://my.domain/path/ \ --data 'key=values'
如果要讓 curl 讀取 pipe 進來的資料,則改使用 @-
:
echo /var/log/http/error.log | \ curl -X POST https://my.domain/path/ \ --data '@-'
Laravel 的 queue worker 與 Horizon 需要透過 artisan queue:work
在背景執行,若可以的話,再使用 systemd 或 supervisor 來監控運作狀態。
不過 systemd 和 supervisor 都需要 root 權限來操作,說起來蠻麻煩的,所以寫了一小段 shell script 來啟動與停止,沒辦法在 worker 中斷時 restart,但可以做 graceful start & shutdown。
啟動 queue worker:
./artisan queue:work \ --no-interaction --no-ansi >> storage/logs/queue.log 2>&1 & # 透過 $? 來檢查指令執行是否成功 if [ $? -ne 0 ]; then echo "FAILED !" else echo "OK" fi
停止所有的 queue worker:
# queue:restart 會送訊號給所有的 worker 來 graceful shutdown ./artisan queue:restart --quiet --no-ansi # 檢查是否所有的 proccess 都停止 while [ 1 ]; do QUERY="$(ps -ef | grep queue:work | grep -v grep)" if [ -z "${QUERY}" ]; then break else sleep 1 fi done echo "OK"
Laravel Horizon 的操作相對簡單一些。
啟動 Horizon:
./artisan horizon \ --quiet --no-interaction --no-ansi >> storage/logs/horizon.log 2>&1 & if [ $? -ne 0 ]; then echo "FAILED !" else echo "OK" fi
停止 Horizon:
artisan horizon:terminate --quiet --no-interaction --no-ansi # 檢查 proccess 是否終止 while [ 1 ]; do QUERY="$(ps -ef | grep horizon | grep -v grep)" if [ -z "${QUERY}" ]; then echo "OK" else sleep 1 fi done
透過 bash 中的 $?
來讀取前一個指令的狀態 (exit code)。一般來說,正常執行的 exit code 會是 0
,若有發生錯誤或其他狀況,exit code 則會是 1
– 255
之間。
正常結束的 exit code:
ls /var echo $? 0
若發生錯誤,則有其他 exit code:
ls /not-exsit echo $? 2
在 shell script 中用 if 判斷程式是否要繼續執行:
curl -s https://test.com/install.sh -o install.sh if [ @? -ne 0 ]; then echo "download failed" exit fi # run install
現在 Linux 終端機 (teminal) 中的各種說明、操作提示都很人性的翻譯成各國語言,用起來真的很親切 …. 直到你遇到錯誤要上網查資料 XD
將以下幾個參數複製到 .bashrc
檔中,終端機就會全部以英文為主,這樣遇到錯誤訊息要上網查才不會查不到資料:
# put it in .bashrc export LANG=C export LANGUANGE="en_US"
在 StackExchange 看到不錯的解法:
tr -dc A-Za-z0-9 </dev/urandom | head -c 16
head
那邊的 16
為字串長度,假如只需要 4 個字的話就改成 4
即可。
另外,上面產生出來的英文字母有分大小寫,可以再搭配 tr
把文字全部轉小寫、或轉大寫:
echo "Hello World" | tr '[:upper:]' '[:lower:]'