在服務器上安裝的各種中間件,一般都需要配置成開機自啟動。但是有些中間件的安裝過程中并沒有提供相關配置開機自啟動的說明文檔。本文總結一下Centos7通過systemctl enble配置服務自啟動的方法。
一、Centos7通過systemctl enble配置服務自啟動
在Centos7后,更推薦通過systemctl來控制服務。
Centos 系統服務腳本目錄/usr/lib/systemd/ 有系統(system)和用戶(user)之分,如需要開機沒有登陸情況下就能運行的程序,存在系統服務(system)里,即:/usr/lib/systemd/system/。反之,用戶登錄后才能運行的程序,存在用戶(user)里,服務以.service結尾,即:/usr/lib/systemd/user/
??服務的管理是通過 systemd,而 systemd 的配置文件大部分放置于 /usr/lib/systemd/目錄內。但是 Red Hat 官方文件指出(詳情請看:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/150.html), 該目錄的文件主要是原本軟件所提供的設置,建議不要修改!而要修改的位置應該放置于 /etc/systemd/system/目錄內。
1.1 對于已安裝的服務,直接設置開機自啟動
1.查看服務狀態:systemctl status 服務名
#示例
systemctl status zentao
systemctl status gitlab-runsvdir
如下圖所示:
disabled:說明服務還沒有開啟開機自啟動。
enabled:說明服務開啟了開機自啟動。
2.服務還沒有開啟開機自啟動的,設置為開啟開機自啟動狀態,執行命令:
systemctl enable 服務名
#示例
systemctl enable zentao
設置完成后,再查看狀態:systemctl status zentao
服務狀態說明:systemctl status 服務名稱
loaded 系統服務已經初始化完成,加載過配置
active(running) 正有一個或多個程序正在系統中執行, vsftpd就是這種模式
atcive(exited) 僅執行一次就正常結束的服務, 目前並沒有任何程序在系統中執行
atcive(waiting) 正在執行當中,不過還再等待其他的事件才能繼續處理
inactive 服務關閉
enbaled 服務開機啟動
disabled 服務開機不自啟
static 服務開機啟動項不可被管理
failed 系統配置錯誤
1.2 對于未安裝的服務,建立腳本設置開機自啟動
以建立zentao服務開機自啟動為例:
1.建立zentao服務文件:
#進入系統服務腳本目錄
cd /usr/lib/systemd/system
# 建立服務文件
vim zentao.service
輸入腳本內容:
[Unit]
Description=zentao
After=multi-user.target[Service]
Type=forking
ExecStart=/opt/zbox/zbox start
ExecReload=/opt/zbox/zbox restart
ExecStop=/opt/zbox/zbox stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
注意??:
這里ExecStart、ExecReload、ExecStop的命令還是借助了上文在/etc/init.d目錄下配置kibana腳本來實現。
參數說明:
[Unit]
(1) Description:描述服務
(2) After:描述服務類別
[Service]服務運行參數的設置 服務的啟動、重啟、停止命令全部要求使用絕對路徑
(1)Type=forking是后臺運行的形式
(2) User 服務啟動用戶
(3) Group 服務啟動用戶組
(4) ExecStart 為服務的具體運行命令
(5) ExecReload 為重啟命令
(6) ExecStop 為停止命令
(7) PrivateTmp=True表示給服務分配獨立的臨時空間
[Install]服務安裝的相關設置
(1)WantedBy=multi-user.target 設置為多用戶
2.賦予執行權限,執行命令:chmod 754 zentao.service
權限組合就是對應權限值求和,如下:
7 = 4 + 2 + 1 讀寫運行權限
5 = 4 + 1 讀和運行權限
4 = 4 只讀權限.
這句命令的意思是將filename文件的讀寫運行權限賦予文件所有者,把讀和運行的權限賦予群組用戶,把讀的權限賦予其他用戶。
3.查看服務狀態
(1)重新加載某個服務的配置文件,如果新安裝了一個服務,歸屬于 systemctl 管理,要是新服務的服務程序配置文件生效,需重新加載,執行命令:systemctl daemon-reload
(2)查看服務狀態,執行命令:systemctl status zentao.service
其中,disabled說明服務還沒有開啟開機自啟動。
(3)開啟服務開機啟動,執行命令:systemctl enable zentao.service
1.3 常用服務文件
1.nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
2.mysql.service
[Unit]
Description=mysql
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
#ExecReload=/usr/local/mysql/support-files/mysql.server restart
#ExecStop=/usr/local/mysql/support-files/mysql.server stop
#PrivateTmp=true[Install]
WantedBy=multi-user.target
- redis.service
[Unit]
Description=Redis
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=kill -INT `cat /tmp/redis.pid`
User=www
Group=www[Install]
WantedBy=multi-user.target
- supervisord.service
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
SysVStartPriority=99[Install]
WantedBy=multi-user.target