摘要
1. nohup &
2. screen
3. bg & disown
4. systemd
5. crontab @reboot
背景
最近一直在用linux
想着多總結一下.
因爲服務運行的方式比較多, 想着也能夠多總結一下
便於後面的問題處理
nohup 的方式
nohup 是最簡單的一種啓動服務的方式
nohup 的含義在於防止被終端.
& 的方式是將服務放在後臺運行
所以一般的方式爲:
nohup ./xxxx &
shell關了,後者是網絡終端還會繼續運行.
screen的方式
yum install screen -y
可以使用 screen 的命令打開服務窗口
screen -S yourname -> 新建一個叫yourname的session
screen -ls -> 列出當前所有的session
screen -r yourname -> 回到yourname這個session
screen -d yourname -> 遠程detach某個session
screen -d -r yourname -> 結束當前session並回到yourname這個session
可以通過 screen -S zhaobsh 打開一個session 進行命令的輸入
如果網絡出問題. 這個服務還是會一直存在的. 避免網絡終端導致問題.
bg & disown
有時候很多服務都是必須有交互纔可以的.
此時通過nohup的方式不太合適.
如果機器又不能上網, 此時使用 screen 可能比較麻煩
所以可以使用
ctrl+z的方式暫時中斷服務
然後根據反饋的任務號
通過
bg %數字
的方式進行設置服務後臺運行.
然後在使用
disown -h %數字
可以講這個服務與 當前的shell進程斷掉聯繫.
這樣服務就從一個前臺服務 變成了後臺服務.
systemd
可以添加一個 systemd的服務 基本上可以如圖進行設置
一般位於 /etc/systemd/system/ 下面
比如可以建立一個文件爲 app.service
可以使用 systemctl enable app 設置開機自動啓動
然後使用systemctl start app 來啓動服務
[Unit]
Description=app
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
WorkingDirectory=/app
Restart=always
Type=forking
ExecStart=/app/startup.sh
ExecStop=/usr/bin/kill -15 $MAINPID
[Install]
WantedBy=multi-user.target
crontab
可以設置計劃任務,開機自動動服務
比較簡單.
第一: systemctl status crond
需要保證計劃任務是開啓的.
第二: 需要編寫一套啓動腳本比如
cat /etc/startredis <<EOF
cd /redis && ./redis-server /redis/redis.conf
EOF
chmod 700 /etc/startredis
第三設置開機啓動
crontab -e
增加一行配置
@reboot /etc/startredis
注意配置方式跟vim 是一樣的
insert 進入輸入模式
ESC 退出到命令模式
輸入 :wq 保存並且退出.