Python爬蟲之用supervisor使scrapy在服務器後臺運行

折騰原因

之前都是遠程連接服務器,然後在命令行運行scrapy crawl spider,一旦關閉遠程連接,爬蟲就會停止,很不爽,畢竟能讓一個爬蟲在服務器一直跑纔是每個小白的夢想= =,所以開始研究如何使程序在後臺運行,剛開始看了scrapyd,感覺不好用,又搜了搜,發現了supervisor這個python進程管理程序。

supervisor簡介

Supervisor是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變爲後臺daemon,並監控進程狀態,異常退出時能自動重啓。它是通過fork/exec的方式把這些被管理的進程當作supervisor的子進程來啓動,這樣只要在supervisor的配置文件中,把要管理的進程的可執行文件的路徑寫進去即可。也實現當子進程掛掉的時候,父進程可以準確獲取子進程掛掉的信息的,可以選擇是否自己啓動和報警。supervisor還提供了一個功能,可以爲supervisord或者每個子進程,設置一個非root的user,這個user就可以管理它對應的進程。

安裝supervisor

我的系統是centos7所以運行以下命令

# yum install supervisor

等待安裝完後,進入/ect目錄,主要看如下兩個文件。
etc
supervisord.conf爲主配置文件,可以打開看一下,不用更改,supervisord.d爲子進程的配置文件夾,存放在這裏的配置文件在程序啓動後會自動讀取該文件夾下的文件,我們進入這個文件夾,創建一個子進程文件,名爲awesome.ini,內容如下:

[program:awesome]

command     = shell.py
directory   = /python/scrapy
user        = root
startsecs   = 3

redirect_stderr         = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups  = 10
stdout_logfile          = /log/app.log

說明:
command:爲要後臺運行的shell命令
directory:指定command命令要執行的文件夾
user:執行命令的用戶
stdout_logfile:程序運行的日誌,報錯可以在這裏看。
創建好子進程文件後,運行如下命令解鎖程序:

# sudo unlink /run/supervisor.sock

再運行以下命令運行程序啓動爬蟲:

# supervisord

運行成功會有如下提示:

/usr/lib/python2.7/site-packages/supervisor/options.py:296: UserWarning: Supervisord is running 
as root and it is searching for its configuration file in default locations (including it
s current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '

進程管理的相關命令

1) 查看所有子進程的狀態:

# supervisorctl status

awesome                             RUNNING    pid 2395, uptime 0:08:41

2)關閉、開啓指定的子進程:

# supervisorctl stop zhoujy
awesome: stopped

3)關閉、開啓所有的子進程:

# supervisorctl stop all
awesome: stopped
# supervisorctl start all
awesome: started

總結

終於可以愉快的爬蟲了呢!OvO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章