Ubuntu上用systemctl實現隨機啟動

2021-10-07 06:45:11 字數 3222 閱讀 1213

在ubuntu 16.04 lts中,/etc/init.d已被/usr/lib/systemd所取代(貌似15.04就已經轉用了)。指令碼仍然可以啟動和停用服務。但預設用的命令現在是』systemctl』。而不是chkconfig命令.當然你可以自己安裝chkconfig命令,來支援舊配置。換方之,ubuntu 16.04 lts中已經預設不安裝chkconfig了。所以本文會更關注systemctl的使用。systemctl使用步驟上主要分如下幾步:

編寫擴充套件名為service的配置檔案(下面假設配置檔案名為:servicectrl.service)

把配置檔案放入/lib/systemd/system/目錄

載入服務的配置檔案:sudo systemctl daemon-reload

手動啟動服務:sudo systemctl start servicectrl.service

手動關閉服務:sudo systemctl stop servicectrl.service

設定開機啟動服務:sudo systemctl enable servicectrl.service

取消開機啟動服務:sudo systemctl disable servicectrl.service

參考:

數個配置例子

詳細的配置項說明

配置檔案的命名格式為:【檔名常與服務名相同】.service

即除了要求擴充套件名為service.其他沒有特別要求.不過為了方便通常我們會把配置檔名設為需要啟動的程式名.因為我們這裡用於演示的程式檔名為servicectrl.所以配置檔名就成了:servicectrl.service

配置檔案的編寫實質也很簡.下面是乙個簡化版的配置(經測試可用):

[unit]

description=servicectrl

after=network.target

[service]

type=forking

execstart=/home/hgits/work/project/thirdparty/trunk/source/hgservicefw/hgservicefw/output/servicectrl -s

execstop=/home/hgits/work/project/thirdparty/trunk/source/hgservicefw/hgservicefw/output/servicectrl -t

[install]

wantedby=multi-user.target

上面配置的內容中,實質只需要關注execstart及execstop這兩個配置項即可.

execstart : 用於設定啟動程式的命令

execstop : 用於設定關閉程式的命令

這兩個配置項都可以設定為乙個shell指令碼的路徑.

要注意/lib/systemd/system/是受保護目錄.所以需要sudo或root許可權才可以修改.

使用如下命令完成手動 啟動

sudo systemctl start servicectrl.service

使用如下命令完成動手動 關閉

sudo systemctl stop servicectrl.service

使用如下命令設定開機啟動服務

sudo systemctl enable servicectrl.service

使用如下命令取消開機啟動服務

如上圖服務啟動失敗,啟動用的命令是:

sudo systemctl status servicectrl.service
查到的結果.其中"status=127"本來是指帳戶或帳戶許可權有問題,造成啟動失敗.如下有一些資料:

但我遇到的不是帳戶問題.我的情況是:

成因為,因為自定義的環境變數沒有生效,目標程式的依賴的動態庫沒有找到,所以出問題.解決方法, 把程式依賴的所有動態庫複製到程式所在目錄.

在centos7上遇到該問題:用rc.local設定開機啟動,及用systemctl設定的開機啟動的程式都啟動子程序。在qt上的表現為呼叫qprocess時,start後老是等到超時都沒有輸出。注意是超時,不是start失敗。 解決方法是:

sudo

chmod 777 /etc/rc.d/rc.local  或 

sudo

chmod 777 /etc/systemd/system/[服務名].service

在centos7上遇到該問題:我自己在profile中設定的環境變數,在開機啟動的程式中訪問不到。這時需要在 /etc/systemd/system.conf 中加入預設環境變數,如下是一些例子(檔案尾追加)。

defaultenvironment=

"std_sdk_home=/home/hgits/installed/std_sdk/"

defaultenvironment=

"std_boost_home=/usr/local/include/"

defaultenvironment=

"ld_library_path=/home/hgits/installed/std_sdk/lib:/home/hgits/installed/std_sdk/bin:/usr/local/include/lib:/usr/local/include/bin"

當我們自己新增系統服務時,也可以在/etc/systemd/system/myservice.service.d中以.conf結尾的檔案(一般來說是override.conf,可以直接用systemctl edit mysevice開啟)中為需要啟動的服務程序指定環境變數,語法為environment=,或者environmentfile=,後一種方法會指定環境變數檔案,適合需要設定比較多的環境變數的情況。

本文主要說述systemctl設定開機啟動的方法.並給出了乙個最簡單的可用配置示例.其對於設定隨機啟動已經足夠.但本文還沒有涉及一些常用的配置項說明.例如:pidfile及user,這些常用配置項的說明,會另起文章進行說明.

ubuntu上用vsftpd建立匿名ftp伺服器

1.sudo apt get install vsftpd 2.建立你的ftp根目錄 sudo mkdir var ftp root 3.把 your ftp path的許可權改為555 sudo chmod r 555 var ftp root 4.在 your ftp path下建立子目錄sub...

Ubuntu上安裝Docker及其基本用法

一 docker介紹 三大核心概念 映象images 映象類似於虛擬機器的映象,可以理解是乙個面向docker引擎的唯讀模板。它是建立docker容器的基礎。容器container docker容器類似於乙個輕量級的沙箱,docker利用容器來執行和隔離應用。它是建立映象應用的執行例項,可以將其啟動...

用Wubi方式在XP上安裝Ubuntu

使用wubi安裝的好處 1,可以將ubuntu安裝到任意分割槽 2,可以使用windows控制面板的 新增刪除程式 解除安裝 3,安裝後的ubuntu可以訪問其他windows分割槽的檔案 安裝前的準備工作 3,將你的硬碟分割槽的卷標全部換成英文 這個問題會導致wubi無法執行 4,安裝ubuntu...