一般來說守護進程是通過shell腳本來實現的,大致過程如下:
- 創建shell腳本,在文件開頭加上
#!/bin/sh
, 然後寫入要執行的任務。 - 創建service文件,在文件中寫入要執行的shell文件路徑,路徑必須爲絕對路徑。
- 使用systemctl啓動守護進程。
如果想要把一個python任務設置爲守護進程,可以省略第一步,直接將要執行的python文件寫入service文件即可,詳細過程如下:
1. 安裝systemd
Ubuntu: sudo apt-get install systemd
Centos: sudo yum install systemd
2. 配置service文件
創建一個名字爲python_taskd.service
的service文件,文件名最後的字母d表示守護進程的意思,需要注意的是文件中凡是涉及到路徑的地方, 不能使用相對路徑。
2.1 service文件所在路徑
注意 Centos 與 Ubuntu 中存放 service 文件的路徑不同
Centos:vim /usr/lib/systemd/system/python_taskd.service
Ubuntu:vim /lib/systemd/system/python_taskd.service
2.2 service文件內容
假設 python 所在路徑爲 /usr/bin/python3
,要執行的python文件爲 /root/python_task.py
,則service文件中應寫入以下內容
[Unit]
Description=start news spider
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /root/python_task.py
ExecReload=/usr/bin/python3 /root/python_task.py
ExecStop=
[Install]
WantedBy=multi-user.target
3. 啓動守護進程
管理守護進程的常用命令有:
systemctl daemon-reload
systemctl start python_taskd.service
systemctl restart python_taskd.service
systemctl status -l python_taskd.service
4. 查看日誌
使用journalctl
可以查看系統運行的日誌
sudo journalctl -u python_taskd.service --since="2019-09-16 00:00:00" --until "2019-09-16 12:00:00"
其中 -u python_taskd.service
表示過濾出與python_taskd
相關的日誌,--since
和 --until
表示要查看的起止日期。
5. 常見錯誤
- shell腳本的開頭沒加上#!/bin/sh
- shell腳本沒有添加執行權限
- service文件裏有相對路徑
- service文件放置在錯誤的目錄
通過報錯信息很難看出問題出在什麼地方,所以需要逐一排查,一般報錯信息如下: