Ubuntu 18.04 安裝 supervisor

Install

$ sudo apt update
$ sudo apt install -y supervisor

Setting

設定檔新增於 /etc/supervisor/conf.d/hello.conf 中。

[program:hello]
directory = /root
command = /bin/echo "Hello"
autostart = true
startsecs = 5
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /var/log/hello.log

重新 reload 設定 sudo supervisorctl reload,接著使用 status 確認狀態。

$ sudo supervisorctl status all
hello                            BACKOFF   Exited too quickly (process log may have details)
$ tail /var/log/hello.log 
Hello
Hello
Hello
Hello

由於 Echo 是會馬上結束,而我們設定會重試三次,所以輸出四次。通常 Command 會設定成一個永不中止的 Server。

Ref.

http://supervisord.org/configuration.html

如何在Google Sheet上設定Webhook

讓 Google Sheet 支援 Webhook 可以做些什麼?

如果平常需要蒐集以及對資料做一些運算及處理,Google Sheet 是個非常強大的服務,但跟 Excel 一樣,Google Sheet 正常的使用方法是必須透過 Key in 或是使用 Google Sheet API 來做資料內容的修改。但 Google Sheet API 使用上雖然強大但並不容易使用,有時候只是需要快速的從其他 App / Server / Web 把資料新增進去 Google Sheet 且不需要做一些複雜運算,同時也不是什麼重要的服務,這時候使用 API 就有點麻煩。今天就來介紹如何透過 Google Sheet 內建的指令寫一些簡單的邏輯讓別的服務可以透過 Post/Get 的方式來取得或新增 Google Sheet 中的資料。

指令碼編輯器

  1. 首先先從 Google Sheet 的某個檔案中 Tools –> Script Editor
  2. 會開啟一個新的分頁,然後先編輯既有的 .gs 檔,打入以下範例程式碼,存檔。
//this is a function that fires when the webapp receives a GET request
function doGet(e) {
  return ContentService.createTextOutput("get request");
}

//this is a function that fires when the webapp receives a POST request
function doPost(e) {
  return ContentService.createTextOutput("post request");
}
  • 接著發佈成網路應用程式(Web app),記得要設定相對應權限。

使用 Post 新增資料到 Google Sheet 中

先假設資料內容長得像以下格是,每次新增時都會在 Google Sheet 中新增內容並且上新增時間

{
  "user": "BCN",
  "message": "Hi webhook"
}

修改 doPost 指令

現在必須在剛剛寫的 .gs 檔案中的 doPost function 將這段 json 的內容解析出來並新增到 Google Sheet 中。

//this is a function that fires when the webapp receives a GET request
function doGet(e) {
  return ContentService.createTextOutput("get request");
}

//this is a function that fires when the webapp receives a POST request
function doPost(e) {
  var data = JSON.parse(e.postData.contents); // Get data from request.
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([data.user, data.message, new Date()]);
  SpreadsheetApp.flush();
  return ContentService.createTextOutput("post request");
}

這樣就可以使用 Postman 或是其他測試工具將資料寫入 Google Sheet 中了。

WeeChat 自動加入 Channel

之前開始使用 WeeChat 當作 IRC Client,發現機器或程式不小心重啟後在 Layout 中的 Channel 會被清空,如果沒加入 autojoin 的列表的話就必需重新再加入一次。上網查了一些資訊,可以靠一個 Python 腳本讓 Weechat 重啟後回到上一次執行時的 Layout。

事前準備

首先要先確認安裝了 weechat-python。 如果是 Ubuntu 可以用以下指令安裝

$ sudo apt install weechat-python

安裝腳本

執行腳本

  1. 開啟 weechat
  2. 執行 /python autoload 重新讀取腳本
  3. 執行 /autojoin --run 啟動自動加入 Channel
  4. 執行 /layout store 存下目前 Channel 順序
  5. 執行 /save 存下目前設定

下次重新開啟 weechat 的時候就會自動加入了。