這邊記錄一個方法來當server上的job跑完時,可以在MacBook上面跳出一個通知。
方法簡介
使用的方法是透過在SSH連線至遠端server的時候,順便做port forwarding,把自己電腦的port 22接上遠端server,如此便可以讓遠端server透過SSH連線回電腦上使用command line跳出通知。
在MacBook上面允許SSH連線
首先,我們必須要讓MacBook可以接受SSH離線,只需要在設定→共享
裡面打開SSH連線的設定就可以了,在Apple官方的使用手冊上有詳細的說明。
Forward Local Port
在SSH連線到遠端server的時候,可以多加-R
這個option,便可以把本機的port接到遠端server上。
ssh -R 2000:localhost:22 <username>@<hostname>
在上面的指令當中,便是將遠端server的port 2000跟本機的port 22做連結。
從Server連回本機
在連上server以後,可以先試著將底下的username
換成本機的使用者名稱測試看看能不能連回來。
ssh -p 2000 <username>@localhost
如果能順利連回來的話,接下來便是把public key放到本機裡面,以避免每次連線都要打密碼,詳細的流程看底下的步驟,主要是參考這篇文章。
-
在server上使用底下的指令創造key
ssh-keygen
-
把創建出來,帶有
.pub
副檔名的檔案裡面所有的內容複製進本機的~/.ssh/authorized_keys這份檔案中,如果這個檔案原本不存在,可以直接用文字編輯器建立 -
在server上透過key來連線至本機
ssh -i <path to private key> -p <port> <username>@localhost
預設private key的路徑會是~/.ssh/id_rsa。
傳送Notification
在能順利從server連回本機以後,就可以透過command line來傳送notification了,底下的指令是使用MacBook原生的指令來產生notification,其他argument可以參考這篇文章。
osascript -e 'display notification "" with title "Job Finished!" subtitle ""'
在通知跳出來以後,可以對著通知按右鍵對通知做設定。
總結
上面使用了一個簡單的方式來讓server控制本機發送通知,可以將連線、發送通知寫成腳本,並在server完成job時呼叫這個腳本來提醒你job已經跑完了。
[Your command] || send_notification.sh