一.系統(tǒng)服務(wù)
如果組件已經(jīng)安裝為系統(tǒng)服務(wù),默認(rèn)服務(wù)文件為 xxx.service,存儲在 /usr/lib/systemd/system
可以使用以下2種方式設(shè)置開機(jī)啟動
systemctl方式
systemctl enable/disable xxx 指令設(shè)置/取消開機(jī)啟動 --查看是否開機(jī)啟動 [root@localhost system]# systemctl status chronyd.service ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-07-28 1839 CST; 4 months 4 days ago Docs: man:chronyd(8) man:chrony.conf(5) Main PID: 790 (chronyd) Memory: 1.0M CGroup: /system.slice/chronyd.service └─790 /usr/sbin/chronyd systemctl list-unit-files # 查看服務(wù)的自啟動狀態(tài)以list-unit-files為準(zhǔn) # 但是系統(tǒng)服務(wù)太多,我想分類查看該如何做? # 查看系統(tǒng)中已經(jīng)enable的服務(wù) systemctl list-unit-files --state=enabled 或 systemctl is-enabled # 查看系統(tǒng)中已經(jīng)disable的服務(wù) systemctl list-unit-files --state=disabled 或 systemctl is-enabled # --state還可以與list-units結(jié)合使用,具體可使用以下命令查詢用法 systemctl --state=help
chkconfig方式(較復(fù)雜)
chkconfig --add xxx && chkconfig --level 3 xxx on/off,本方式要求服務(wù)腳本文件必須在 /etc/init.d/ 目錄下,且結(jié)合 /etc/rc.d/rc0.d~rc6.d目錄實(shí)現(xiàn),同時(shí)服務(wù)腳本文件必須包含必要的頭部腳本代碼,較復(fù)雜 --查看是否開機(jī)啟動 chkconfig --list network 注:該輸出結(jié)果只顯示 SysV 服務(wù),并不包含原生 systemd 服務(wù)。SysV 配置數(shù)據(jù)可能被原生 systemd 配置覆蓋。 要列出 systemd 服務(wù),請執(zhí)行 'systemctl list-unit-files' 查看在具體 target 啟用的服務(wù)請執(zhí)行 'systemctl list-dependencies [target]' network 0:關(guān) 1:關(guān) 2:開 3:開 4:開 5:開 6:關(guān)
特別關(guān)注:systemctl方式實(shí)際效果
該方式實(shí)際是在 /etc/systemd/system/xxx/ 或 /etc/systemd/user/下創(chuàng)建 .service文件 的軟連接,分別代表系統(tǒng)服務(wù)與用戶服務(wù)。
其中,xxx為該服務(wù)的適用模式,如網(wǎng)絡(luò)服務(wù)network-online.target.wants、多用戶服務(wù)multi-user.target.wants。
[root@localhost ~]# systemctl enable mysqld Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
該方式下,取消卡機(jī)啟動,可以執(zhí)行以下操作之一
systemctl disable xxx
移除 /etc/systemd/system/xxx/ 或 /etc/systemd/user/ 下相應(yīng)軟連接或服務(wù)文件
二.通用方案
不管組件是否已經(jīng)安裝為系統(tǒng)服務(wù),可以通過開機(jī)啟動腳本實(shí)現(xiàn)
注意,以下操作,均需要設(shè)置相關(guān)腳本的可執(zhí)行權(quán)限,即 chmod +x 啟動腳本
方法一:追加啟動命令到默認(rèn)啟動腳本 /etc/rc.local,或/etc/rc.d/rc.local,前者是后者的軟連接
方法二:編寫啟動腳本.sh,放到目錄 /etc/profile.d下
方法三:編寫啟動腳本.sh,將腳本的執(zhí)行指令追加到 /etc/rc.local,或/etc/rc.d/rc.local
三.crontab方案
crontab支持特殊關(guān)鍵字實(shí)現(xiàn)特定任務(wù)調(diào)度,代替 5個(gè)時(shí)間設(shè)置標(biāo)識符(分 時(shí) 日 月 周),特殊語法以 @ 符號作為前綴
具體請參考:官方文檔
語法:@xxx command
@reboot : Run once after reboot. 重啟時(shí)執(zhí)行一次,實(shí)測比 /etc/rc.d/rc.local 更早執(zhí)行(提前1-2s),比默認(rèn)1分鐘定時(shí)提前30s左右 @yearly : Run once a year, ie. "0 0 1 1 *". 一年執(zhí)行一次,1月1號0點(diǎn)0分執(zhí)行 @annually : Run once a year, ie. "0 0 1 1 *". 一年執(zhí)行一次,1月1號0點(diǎn)0分執(zhí)行 @monthly : Run once a month, ie. "0 0 1 * *". 一月執(zhí)行一次,每月1號0點(diǎn)0分執(zhí)行 @weekly : Run once a week, ie. "0 0 * * 0". 一周執(zhí)行一次 @daily : Run once a day, ie. "0 0 * * *". 一天執(zhí)行一次 @hourly : Run once an hour, ie. "0 * * * *". 一小時(shí)執(zhí)行一次
即,可以使用 @reboot 關(guān)鍵字實(shí)現(xiàn)開機(jī)啟動功能,示例如下
[root@localhost daemonProcess]# crontab -e # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed #開機(jī)啟動 @reboot /usr/local/daemonProcess/somescript.sh #守護(hù) * * * * * /usr/local/daemonProcess/somescript.sh
特別關(guān)注:
是否同時(shí)使用 @reboot 和 定時(shí),需要根據(jù)實(shí)際業(yè)務(wù)需要來決定。
如果守護(hù)定時(shí)設(shè)置為1分鐘,即 * * * * *,則建議不再設(shè)置 @reboot,因?yàn)閮烧咴陂_機(jī)啟動后的1分鐘內(nèi),都會執(zhí)行,可能會造成重復(fù)執(zhí)行,如果所守護(hù)的應(yīng)用服務(wù)兼容重復(fù)啟動,沒有問題,如果不兼容,建議使用一種方案。
如果守護(hù)定時(shí)間隔比較大,還是建議同時(shí)使用 @reboot,保證應(yīng)用服務(wù)及時(shí)啟動。
四.生產(chǎn)環(huán)境開機(jī)啟動方案建議
以上3種方案,建議在生產(chǎn)環(huán)境只采用一種,所有組件、服務(wù)統(tǒng)一,便于服務(wù)較多時(shí)快速運(yùn)維。
比如,有些服務(wù)默認(rèn)安裝時(shí)不會自動生成 系統(tǒng)服務(wù),所以方案一的方式不能適用生產(chǎn)環(huán)境中所有組件、服務(wù),如果此時(shí)按照各組件、服務(wù)分別制定開機(jī)啟動方案,則在后續(xù)如果服務(wù)啟動異常 或 服務(wù)發(fā)版時(shí),就需要明確識別各服務(wù)的開機(jī)啟動方案,然后做相應(yīng)的操作,提高運(yùn)維成本,增加出錯概率。
附錄:開機(jī)啟動腳本示例
1.追加啟動命令到 /etc/rc.local,或/etc/rc.d/rc.local,前者是后者的軟連接 2.編寫啟動腳本.sh,放到目錄 /etc/profile.d下 --- chmod +x /etc/rc.d/rc.local #開機(jī)啟動腳本 /usr/local/AutoStartOnBoot.sh chmod +x /usr/local/AutoStartOnBoot.sh #本腳本需要依賴 /etc/rc.d/rc.local #rc.local在加載環(huán)境變量之前執(zhí)行,所以此處需要人工加載 source /etc/profile #redis /usr/local/redis/redis-5.0.13/bin/redis-server /usr/local/redis/redis-5.0.13/conf/redis.conf #zk #zk pid文件必須先刪除后重啟 rm -f /data/zookeeper/data/zookeeper_server.pid; /usr/local/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start #kafka JMX_PORT=9999 /usr/local/kafka_2.13-2.7.1/bin/kafka-server-start.sh -daemon /usr/local/kafka_2.13-2.7.1/config/server.properties #kafka-manager #kafka-manager pid文件必須先刪除后重啟 rm -f /usr/local/kafka-manager-2.0.0.2/RUNNING_PID nohup /usr/local/kafka-manager-2.0.0.2/bin/kafka-manager -Dconfig.file=/usr/local/kafka-manager-2.0.0.2/conf/application.conf -Dhttp.port=9002 >/dev/null 2>&1 & #mysql service mysqld start
審核編輯:黃飛
評論
查看更多