|Jobs| How to write your own daemon?

要怎樣寫一個服務:他能夠

在一開機啟動、

不易死掉(你可以寫 script 一直啟動他)、

fork() 後終止父行程並和呼叫的終端機(TTY)脫離關係?

 

首先,我們可以寫個服務(執行檔或是一個 script),處理我們要做的事。

接著,我們再準備一個script,放到正確的位置。而這份草稿他的目的最主要就是: 告訴系統,在一開機啟動我們的服務!

以下最主要就是介紹這個 script 該如何寫:



.Method 1: traditional

1. WRITE: /etc/init.d/triggerd
    to run script or daemon: $TRIGGERD_HOME/bin/triggerMyService.sh

 #!/bin/bash
 start_triggerd=$TRIGGERD_HOME/bin/triggerMyService.sh
 stop_triggerd=$TRIGGERD_HOME/bin/triggerMyService.sh

 start() {
  echo -n “Starting MyService”
 }

 stop() {
  echo -n “Shutdown MyService”
 }

 #how we were called
 case “$1” in
  start)
     start
   ;;
  stop)
   stop
   ;;
  restart)
   stop
   sleep 10
   start
   ;;
  *)
   echo “Usage: $0 {start|stop|restart}”
 esac
 exit 0


2. chmod 777 /etc/init.d/triggerd



.Method 2: systemctl

1. 建立一個名為 triggerd.service 的系統服務指令碼
 vim /usr/lib/systemd/system/triggerd.service

 [Unit]
 Description=triggerMyService.sh

 [Service]
 Type=forking
 PIDFile=…
 Environment=CATALINA_HOME=/usr/local/triggerMyService.sh

 ExecStart=/usr/local/triggerMyService.sh start
 ExecStop=/usr/local/triggerMyService.sh stop
 User=…
 Group=…
 PrivateTmp=true

 [Install]
 WantedBy=multi-user.target

2. 重新載入一下配置
 systemctl daemon-reload

3. 設定允許開機自啟動
 systemctl enable triggerd

 #啟動服務
 systemctl start triggerd

 

ref.

創建 Daemon 程式

start-stop-daemon 啟動停止系統守護進程

[開機啟動]Linux開機自啟和運行級別

centos7下配置Tomcat開機啟動(service方式和daemon方式)

Linux systemd 寫 可自動啟動的 Daemon Service

 

|Jobs| Why should we do unit tests?

In my opinions, I think it is a good way to understand the job scope for a rookie of software engineer.

On the other hand, our products are consumer electronics. Unit tests will help us understand what functions are end users used and whether functions are really useful or not.

Finally, it is an important way to think about why do you develop the features.

下禮拜打算請新人幫忙測試 Unit Tests, 希望他心裡不要太多 murmur.
雖然代工廠不重視這個, 但我認為這是一個認識自己工作的方式. 而且趁機多問一些, 還能夠學到一些設計的方法與考量.

嗯 …… 老實說, 代工廠跟自己做品牌其實思維真的很不同.

 

 

|Life| Manage Everything in Your Life

生活中每件事都要管理的:

管理家裡擺設

管理你的體重

管理你的財務

工作上也是,不能因為是工程師就認為不需要管理。平常養成習慣,管理好你的東西與心思,做事事半功倍。

管理你的文件

管理你的心得

管理你的程式碼

管理你能參考的 Log


祝大家都能管理好自己的人生

|Jobs| How do I teach a Trainee?

哇 工作才剛三年,竟然有機會要帶新人。(因為大家太忙了,我相對離新人不久 XD)

我想我能做的就是:

帶他使用工具(系統廠的 debugger)

克服環境設定的任何問題(這個沒弄好很容易讓人放棄寫程式)

學會看 Code(執行檔要從 main 開始看哦 ^.<)

哪裡找文件

軟體架構上下層輸出輸入的關係

請他找一個自己喜歡的看 Code 軟體

其實在這過程,就會想起之前學長怎麼帶的及前老闆精闢的指點。

大家對我真的是蠻有耐心的,十分感謝。

希望我也能在新人心中留下好印象。

|Tools| Useful Linux Commands

.在特定類型的文件裡找字串
grep -ir “ooxx“ –include=”*.java”

.掛載外接硬碟
sudo fdisk -l
mkdir /media/usb
sudo mount -v -t auto /dev/sdb1 /media/usb

.找特定類型的檔案

find -iname *.git

.確認編譯出來檔案的 ELF

readelf

.列出所有執行的東西

ps -Al

|Jobs| 系統廠工程師需要具備的 Linux 相關知識

  • IPC 溝通有許多方式(兩個 process 互相交換資料的方法)
  • 何時要開 proccess,何時用 multi-thread 就好
  • In C language, system()
  • Makefile 如何寫
  • 系統默認路徑
    • Include 系統默認搜尋範圍: /usr/include/usr/local/include
    • Lib 預設目錄: /lib、/usr/lib、/usr/local/lib
      • 環境變數 LD_LIBRARY_PATH 中指向搜索路徑
      • /etc/ld.so.conf 文件中增加搜索目錄
    • 執行檔預設目錄: 如果不加 ./ ,預設是執行 /bin、/usr/bin

|Jobs| How can operators detect tethering?

出國玩,買 SIM卡 一定要注意,這張卡是否能夠當作 WiFi hotspot 分享給別人,

有的卡是不行的哦!!

 

在某次出差 (2017),我發現,電信業者是有能力知道這張 SIM卡是否有能力 WiFi hotspot,並且禁止這張卡做分享。

我一直以為是 framework 的行為(軟體端去擋),但是我做了一些實驗,發現電信商是可以控制的。(最近的新案子也有談到類似的東西)

表示在卡號之外,你這張卡是否有分享給別人,或者,
別支手機是否透過分享上網的,這兩個一定有其中一個資訊會被電信商知道。

 

稍微上網查了一下,電信商可以偵測到以下資訊,推斷出
你是否正在分享給別人/你是否是透過不能分享的網路上網

How can phone companies detect tethering (incl. Wifi hotspot)

  1. Your phone tells your network that you are tethering
  2. Inspecting the network packets for their TTL (time to live)
  3. MAC address inspection
  4. TCP/IP Stack Fingerprinting
  5. Looking at the Destination IP/URL

 

特別是去英國,要查一下你的卡哦!

Tethering on UK Networks: Which Mobile Networks Allow You To Tether?

|Jobs| 系統廠軟體工程師生存守則

  1. 一開始的 domain knowledge 問同事
  2. 環境建置問同事 + 文件囉
  3. Unit Tests 可以幫助你了解這產品做什麼
  4. 了解文件從哪取得
  5. 縮寫很多 要去查出來並理解
  6. 先知道做什麼 -> 看文件與流程 -> 對照 log 去 Trace code
  7. 以事件為單位 去 trace code
  8. 文件盡量直接從原廠找最新的,自己家的設計才是問同事或 PM
  9. 看懂 function pointer, macro
  10. 注意晶片廠自己定義的 structure 與 型別
    例如: bool v.s. boolean
  11. 各層之間傳遞, 都是用 command (message)
    要弄清楚幾個詞的意義與方向:
    Indicator(單純從底層報訊息上來的東西)
    Request(從上層要問底層資訊的)
    Response(底層回給上層的)
    Unsolicited(單方向的發送)
    Solicited(有一問一答的)
    Notification(單方向的發送)

另外,Open source library 使用時要注意權限。

系統廠就是要學會如何用原廠資源兜出客戶要的東西。各種組合出神奇的產品。

Code 兜的好,生存沒煩惱。

|Design| Make a cache in your program.

Cache 原意是指存取速度比一般隨機存取記憶體(RAM)快的 SRAM。
但在軟體中,就是指:暫存的機制。
目的是:降低存取一些值的代價。

你可以不用為了某個值,每次都要去問底層。
或者,某些 indicator 更新太頻繁,但你不希望上層跟著一直做無意義的更新,就會需要一個 Cache (很像 Temp 去接著它)。

 
比較常見的例子:
瀏覽器的 Cache 功能是可以減少你抓取資料的時間。

WordPress.com.

Up ↑