Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: 資訊學習

多核心主機搭配 GNU parallel

Posted on 2015 年 8 月 3 日2021 年 3 月 12 日 By 日落 在〈多核心主機搭配 GNU parallel〉中尚無留言

假如要將 apache log 中,包含某個 pattern 的記錄找出來,寫起來大概會像這樣子:

cat apache*.log | awk -f log-parser.awk

舊電腦就是放著一個檔案一個檔案慢慢跑,沒什麼問題。若新電腦現在不少都是多核心,看個 parser 慢慢跑,但是剩下的 3 個 CPU core 和 disk 都悠哉沒事做,感覺在浪費時間。

parallel 專門設計來讓 script 可以同時並行運作,使用電腦資源來節省時間的好工具。

假設今天 awk 非常吃 CPU 使用量 (規則較為複雜),處理一個檔案會花上很多 CPU 時間,則可以將 log 中的內容分散給多個 CPU 同時處理:

cat apache*.log | parallel --pipe awk -f log-parser.awk

此時,parallel 偵測到有 4 CPU cores,則會自動將 $FILE 內容分批轉送給 awk 處理 (一行為一個單位),這樣能讓 4 個 CPU 同時跑 awk 解析 log 內容。

不過以一行為一個單位轉送資料給 awk,也會耗掉一些運算資源,可以透過 –block 來要求 parallel 多少資料當作一個單位來轉送資料。以下假設一次送 10MB 的資料給 awk 處理:

cat apache*.log | parallel --pipe --block 10M awk -f log-parser.awk

倘若今天 awk 的要處理的東西並不複雜,可以輕鬆解決掉,上面的寫法反而會讓 CPU 閒閒沒事做,不如就讓一個 awk 負責處理一個檔案,且多個檔案同時進行。此時就可以讓檔案處理的部分轉交給 awk:

parallel --pipe -u --block 10M awk -f log-parser.awk ::: apache*.log

備註:parallel 預設會在所有工作執行結束才輸出結果,若要讓 parallel 即時將結果印出,則可加上參數「-u」。

另外一點要注意的是,parallel 預設會使用所有的 CPU 來處理工作,這在多人共同使用的主機上並不是一件好事,一跑下去大家都不用做事了。所以若在共用環境上請記得加上 -j (jobs) 參數,來限制 parallel 不要用掉所有的系統資源。

Reference:

  • GNU Parallel Tutorial
  • How to write multicore sorting using GNU Parallel
  • Use multiple CPU Cores with your Linux commands — awk, sed, bzip2, grep, wc, etc.
  • Using Multiple CPU Cores With Command Line Tools

Tags:Bash, Linux, 資訊學習

irssi 快速鍵

Posted on 2015 年 3 月 18 日2021 年 3 月 12 日 By 日落 在〈irssi 快速鍵〉中尚無留言

無意間按錯,發現一些快速鍵可以用。

Ctrl + N / P:下一個 / 上一個 channel

Alt + N / P:該 channel 訊息下一頁 / 上一頁

Tags:資訊學習

Post/Redirect/Get Pattern

Posted on 2014 年 9 月 14 日2022 年 7 月 16 日 By 日落 在〈Post/Redirect/Get Pattern〉中尚無留言

Post/Redirect/Get (PRG) pattern 是一種處理表單資料的流程,可以防止使用者回上一頁、或是使用重新整理的方式重複送出表單資料。

再拿留言板舉例 (萬年題材 XD),假設在 form.html 填寫完表單,送出到資料到 post.php,而 post.php 處理資料後直接將結果顯示出來 (傳回 HTML),這個時候再瀏覽器按下「重新整理」按鈕,變會看到提示訊息,詢問是否要重送表單內容。

此時若重送表單資料,則會重新送出一模一樣的內容,若 post.php 沒有特別檢查,就會重複處理。很久以前開心農場就是用這種方法洗禮物的。

為了避免瀏覽器可以重新整理頁面,將資料處理的流程稍微做個調整:

  1. form.html 設定 submit 後,表單資料送給 post.php 處理
  2. post.php 處理資料後,不直接顯示 HTML,只送出 HTTP 3xx 做重新導向,跳到 done.php 顯示處理結果
  3. done.php 透過 URL 參數,顯示相對應的訊息

post.php 寫法大致如下:

if(saveData($_POST)){
   $status = 'ok';
}else{
   $status = 'error';
}

header('Location: done.php?status=' . $status);

由於使用 HTTP 3xx 重新導向,瀏覽器不會將 post.php 紀錄到瀏覽紀錄中,按下「上一頁」按鈕也是回到 form.html 而非 post.php,且 done.php 使用 HTTP GET 方式取得內容,所以重新整理頁面也不會重新送出表單內容。此流程按照三個步驟的 HTTP request 方式稱為 Post/Redirect/Get pattern。

PRG pattern 寫起來至少會有三個頁面要實作,也是挺麻煩的。若還要簡單一點的方式,那大概就是改用 AJAX 處理表單了吧。

Reference:
Post/Redirect/Get – Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Post/Redirect/Get

Tags:Web, 資訊學習

免 root 權限修改預設 login shell

Posted on 2014 年 6 月 10 日2021 年 3 月 12 日 By 日落 在〈免 root 權限修改預設 login shell〉中尚無留言

Linux 帳號、密碼,通常都是放在 /etc/passwd:

zero:x:1002:1002:,,,:/home/zero:/bin/bash

該列最後一個欄位值「/bin/bash」便是預設要使用的 shell。

由於 /etc/passwd 的檔案權限,不是 root 沒辦法修改

-rw-r--r--  1 root root    1725 May 10 13:14 passwd

若沒有 root 權限,可以透過 chsh、ypchsh 來修改預設 shell。

$ chsh
Password:
Changing the login shell for johnroyer
Enter the new value, or press ENTER for the default
        Login Shell [/bin/sh]: /bin/bash

若使用者帳號設定不存在 local,則使用 ypchsh 做修改,用法相同。

Tags:Linux, 資訊學習

將資料同步至 AWS S3

Posted on 2014 年 4 月 1 日2021 年 3 月 12 日 By 日落 在〈將資料同步至 AWS S3〉中尚無留言
將資料同步至 AWS S3

有項工作需要將 BTSync 上的資料同步上 AWS S3,並做靜態網頁使用。原本打算用來將 S3 掛載為虛擬磁碟的 s3ql 來用,但 s3ql 寫入的是 block data 而非 file,檔案同步上去要當作 static website 來用不太可能。

後來發現 AWS command line interface 的 s3 有個功能「sync」,會自動偵測要同步的項目。於是可以寫成:

$ aws s3 sync btsync/ s3://target-bucket

以上已可以將有異動的資料上傳到 AWS S3 上,但若 BTSync 若有檔案刪除,S3 上的資料仍會保留。若要刪除的動作也在 S3 重複一次,則要加上「–delete」參數:

$ aws s3 sync btsync/ s3://target-bucket --delete

還差一個步驟。要做 static web hosting,檔案必須讓所有人可以讀取,所以從網頁上操作的話,需要手動「Make Public」。

而 CLI 則是使用 –grants 幫檔案加上權限。參考 AWS ACL 設定,要讓所有人均可讀取,要設定成:

--grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

如此一來,上傳的檔案會自動設定為公開。

完整的 sync 指令如下:

aws s3 sync btsync/ s3://target-bucket --delete --exclude ".Sync*" --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

最後定 crontab 自動執行,大功告成。

Tags:AWS, 資訊學習

文章分頁

上一頁 1 ... 9 10 11 ... 53 下一頁

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.