轉換 Upstart 到 Systemd

shtzeng Post in Research,Tags: , ,
0

終於有時間寫 blog 了 (汗
應該說最近都在轉換東西,沒有新的技術可以玩

不確定什麼時候,應該是 Ubuntu 16.04 LTS 或附近,決不是 Ubuntu 14.04 LTS 就對了,系統就預設從 Upstart 系統更換到 Systemd 系統
聽說 Systemd 更厲害更快速,但是沒有比較好寫,指令也比較長 T_T
之前會抗拒使用 Ubuntu 16.04 LTS 是因為 Systemd 系統,感覺非常的陌生
不過呢,都是得轉換的,就嘗試著把 Upstart 的設定檔改成 Systemd 的設定檔了

大概簡介一下
最初期的是 SysV
使用的是 /etc/init.d/ 下的設定檔
拜託,很難寫 XD

再來是使用了一陣子的 Upsatrt
設定檔在 /etc/init/ 下
只要將必要的狀況敘述清楚即可
甚至不用自己考慮 pid 之類的
使用上也是很方便,start xxx,stop xxx
對就是這麼無腦

最後就是新的 Systemd
設定檔在 /lib/systemd/system/ 下
在 /etc/system.d/system/ 會有一些檔案,用來描述什麼時候啟動結束之類的,就像 /etc/rcX.d 一樣
使用上呢都得要 systemctl 開頭,什麼 systemctl start xxx,什麼 systemctl stop xxx 的,按 tab 想要打快一點還不行,因為會有 sysctl 很類似會卡住 (棍

算了,抱怨歸抱怨,還是得要用
直接用範例講解比較快
如果原本 Upstart 有一隻設定檔 /etc/init/bigtree.conf

description "BigTree"
author "Big Tree "

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 20 5

script
  export NODE_ENV=production
  export PORT=8080
  exec node /tmp/bigtree.js
end script

轉換成 Systemd /lib/systemd/system/bigtree.service

[Unit]
Description=Big Tree

[Service]
Type=simple
Environment="NODE_ENV=production"
Environment="PORT=8080"
ExecStart=/bin/sh -ec "exec node /tmp/bigtree.js"
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=bigtree.target

加上 /etc/systemd/system/bigtree.target

[Install]
WantedBy=multi-user.target

先注意的是,副檔名有改變,Upstart 使用 conf 但 Systemd 使用 service
對照的部分
Unit 對到描述部分
Service 對到 Script 部分,也有包含 respawn 等
Install 掌管 enable 跟 disable 的部分
檔案都正確後,執行 systemctl enable bigtree 就會幫你產生 /etc/systemd/system/bigtree.target.wants/bigtree.service 到 /lib/systemd/system/bigtree.service 的 soft link,這樣就可以開機時啟動

還有其他參數
因為我沒用到,就沒寫了
請參考https://wiki.ubuntu.com/SystemdForUpstartUsers

剩下的,我也不是很熟
剛教~沒讀~

« Prev: :Next »

Leave a Reply