Ubuntu
在 ubuntu 16.04 上創建守護程序
我用 PHP 開發了一個爬蟲,它解析帶有特定標頭的 URL,並將所有內容的 URL 放入隊列中。它工作正常。
我在 ubuntu 14.04 中開發了這段程式碼,並在 /etc/init 文件夾中放置了一個 .conf 文件,其中包含以下內容:
# Info description "Warm the varnish to get the list of products" author "Juanjo Aguilella" # Events start on startup stop on shutdown # Automatically respawn respawn respawn limit 100 5 # Run the script # Note, in this example, if your PHP script return # the string "ERROR", the daemon will stop itself. script [ $(exec /usr/bin/php -f /var/www/crawler.php) = 'ERROR' ] && ( stop; exit 1; ) end script
它在 Ubuntu 14.04 中執行良好,我可以使用“sudo service crawler start”和“sudo service crawler stop”來啟動和停止守護程序
現在在生產環境中,我有一個 Ubuntu 16.04 伺服器,我將相同的程式碼放在同一個文件夾中,但是當我嘗試啟動服務時,我收到消息“無法啟動 crawler.service。未找到 Unit crawler.service”
你能給我任何幫助嗎?
問候
添加到@Juanjo Aguilella Marés 答案,一旦您將腳本複制/連結到
/etc/systemd/system
,您可能希望在伺服器啟動時自動啟動它:sudo systemctl daemon-reload sudo systemctl enable my_service.service sudo systemctl start my_service.service
源數字海洋
最好不要以 root 身份執行它。只需更改
user
腳本上的行:[Service] User=some_user
我解決了這個問題:
a) 使用以下程式碼在 /etc/systemd/system 中創建文件 crawler.service:
[Unit] Description=Crawler cache Service After=network.target [Service] User=root Restart=always Type=forking ExecStart=/var/www/execute.sh [Install] WantedBy=multi-user.target
我的 bash 文件包含與具有此程式碼的相同 php 文件並行的不同執行:
#!/bin/sh php /var/www/tiendas.local.mediamarkt.es/crawler.php sleep 0.1 { php /var/www/tiendas.local.mediamarkt.es/crawler.php }& sleep 0.2 { php /var/www/tiendas.local.mediamarkt.es/crawler.php }& sleep 0.3 { php /var/www/tiendas.local.mediamarkt.es/crawler.php }& sleep 0.4 { php /var/www/tiendas.local.mediamarkt.es/crawler.php }
執行之間的睡眠是解決服務執行速度如此之快的問題所必需的。
如果您對解決方案有任何建議,請發表評論,我在 bash 文件和 systemd 文件方面沒有很多經驗,但目前工作正常。