在linux下將特定程式包成服務

這幾天才發現,這個很常使用的功能,我竟然沒有寫成文章,難怪最近找起來想說為什麼找不到 XD

故事前提:之前寫的 nodejs 想要在 linux 上跑,但是 SSH 關了,nodejs 也斷了,並沒有乖乖的在背景運作,於是乎後來找了些方法,我覺得這個最適合我ㄌ。

這邊是使用Ubuntu啦,我不確定不同型態的 linux 有沒有差別,應該大同小異啦。
首先先輸入以下內容,myservice 是你想建立的服務名稱,可以更改。

sudo vim /lib/systemd/system/myservice.service

進到 vim 模式,貼上以下內容,並更改成你的形狀(X
Description 的內容是簡介,你可以改成任意你喜歡的,方便辨認就好
ExecStart 是執行的目錄+檔案位置
如果是 nodejs 前段是 /usr/bin/node 如果是 python 前段是 /usr/bin/python3(我的印象,沒很常用PY)
後段就是你的檔案位置囉!

[Unit]
Description=Telegram bot
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/node /var/tgbot/tgbot.js

# 如果想讓崩潰的服務自動重啟
Restart=on-failure
RestartSec=5s

# 如果需要指定工作目錄
WorkingDirectory=/your/path/here

[Install]
WantedBy=multi-user.target

存檔後退出,輸入以下指令讓服務生效。

sudo systemctl daemon-reload

好啦,接下來你可以用以下指令,來控制你建立的服務囉!
各個指令的意義我會註解在後面。

sudo systemctl start myservice.service    #啟動服務
sudo systemctl restart myservice.service  #重新啟動服務
sudo systemctl stop myservice.service     #停止服務
sudo systemctl enable myservice.service   #開機自動執行此服務
sudo systemctl disable myservice.service  #開機不執行此服務(預設)