在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...