Crea demone su Ubuntu 16.04


13

Ho sviluppato un crawler in PHP che analizza un URL con intestazioni specifiche e inserisce tutti gli URL di contenuto nella coda. Funziona bene

Ho sviluppato questo codice in Ubuntu 14.04 e ho inserito un file .conf nella cartella / etc / init con questo contenuto:

# 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

Funziona benissimo in Ubuntu 14.04 e posso avviare e arrestare il demone usando "sudo service crawler start" e "sudo service crawler stop"

Ora in ambiente di produzione ho un server Ubuntu 16.04 e inserisco lo stesso codice nella stessa cartella ma quando provo ad avviare il servizio ricevo il messaggio "Impossibile avviare crawler.service. Unità crawler.service non trovato"

Potete darmi qualche aiuto a riguardo?

Saluti


File eseguibile php mancante in / usr / bin / php? Controlla i registri, avrai alcune informazioni
Dom

2
Ubuntu 16.04 usa systemd. Scopri come funziona e crea un crawler.service.
Halfgaar,

Risposte:


15

Aggiungendo alla risposta @Juanjo Aguilella Marés e una volta copiato / collegato lo script /etc/systemd/system, potresti voler avviarlo automaticamente all'avvio del server:

sudo systemctl daemon-reload
sudo systemctl enable my_service.service
sudo systemctl start my_service.service

Fonte Digital Ocean

È anche una buona idea non eseguirlo come root. Basta cambiare la userriga sul tuo script:

[Service]
User=some_user

12

Ho risolto il problema:

a) Creare un file crawler.service in / etc / systemd / system con questo codice:

[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

il mio file bash contiene diverse esecuzioni in parallelo allo stesso file php con questo codice:

#!/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
}

la sospensione tra le esecuzioni è necessaria per salvare il problema dell'esecuzione così velocemente del servizio.

Se hai qualche suggerimento sulla soluzione, ti preghiamo di commentare, non ho molta esperienza nei file bash e nei file systemd, ma al momento funziona bene.



4

1]. Per creare un servizio vai su / etc / systemd / system /

2]. Creare un file di serviceName ad esempio chatSocket.service

3]. Metti il ​​contenuto nel file come indicato di seguito

[Unit]
Description=Your PHP Daemon Service
#Requires=mysqld.service memcached.service #May your script needs mysql or other services to run.
#After=mysqld.service memcached.service

[Service]
User=root
Type=simple
TimeoutSec=0
PIDFile=/var/run/server.pid
ExecStart=/usr/bin/php -f /home/shrikant/workspace/app/Http/Controllers/server.php  2>&1> /dev/null #path to script
#ExecStop=/bin/kill -HUP $MAINPID
#ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

Restart=on-failure
RestartSec=42s

StandardOutput=null #If you don't want to make toms of logs you can set it null if you sent a file or some other options it will send all php output to this one.
StandardError=/home/shrikant/workspace/app/Http/Controllers/chatSocket.log #path to error log file
[Install]
WantedBy=default.target

4]. Ricarica la configurazione premendo:

sudo systemctl daemon-reload

5]. Abilita il servizio per impostazione predefinita, quindi quando il servizio di avvio del sistema verrà avviato automaticamente:

sudo systemctl enable my_service.service

6]. Avvia il tuo servizio utilizzando il comando seguente:

sudo systemctl start my_service.service

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.