Ubuntu

在 ubuntu 16.04 上創建守護程序

  • July 25, 2019

我用 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 文件方面沒有很多經驗,但目前工作正常。

引用自:https://serverfault.com/questions/785502