在服務器部署服務后,往往需要將服務設置成開機自啟的狀態 ,以防設備出現宕機或斷電重啟,服務無法訪問的情況。
對於常見的服務(httpd,mysqld,nginx)來說,可通過系統 systemctl enable
來完成該工作。但對於自己開發的 service,比如通過 docker,可不可以通過 systemctl enable
來運行呢,下面就是實現方案:
Step1 - 創建啟動文件
vim auto_start_script.sh
#!/bin/bash
/usr/bin/docker-compose -f /home/user/docker-compose/docker-compose.yml up -d
Step2 - 配置權限
# get file info
ls -lrt auto_start_script.sh
# add executable permissions
chmod 744 auto_start_script.sh
Step3 - 自定義系統服務
# Add the service startup file
vim /etc/systemd/system/ctg_docker.service
[Unit]
Description=running docker-compose at the system boot
After=docker.service
[Service]
ExecStart=/home/user/docker-compose/config/auto_start_script.sh
[Install]
# 多用戶登錄或者帶有 desktop 登錄
WantedBy=default.target
# change permission
chmod 644 /etc/systemd/system/ctg_docker.service
Step4 - 測試服務
# 加載服務
systemctl daemon-reload
# 啟動服務,查看是否正常
systemctl start ctg_docker.service
# 添加開機啟動
systemctl enable ctg_docker.service
# 重啟系統
reboot
# 獲取系統啟動時間
cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系統已運行:%d天%d時%d分%d秒",run_days,run_hour,run_minute,run_second)}'
date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"