Utwórz demona na Ubuntu 16.04

13

Opracowałem przeszukiwacz w PHP, który analizuje adres URL z określonymi nagłówkami i umieszcza wszystkie adresy URL treści w kolejce. To działa dobrze.

Opracowałem ten kod w Ubuntu 14.04 i umieściłem plik .conf w folderze / etc / init z następującą zawartością:

# 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

Działa dobrze w systemie Ubuntu 14.04 i mogę uruchomić i zatrzymać demona za pomocą „uruchomienia przeszukiwacza usługi sudo” i „zatrzymania przeszukiwacza usługi sudo”

Teraz w środowisku produkcyjnym mam serwer Ubuntu 16.04 i umieszczam ten sam kod w tym samym folderze, ale kiedy próbuję uruchomić usługę, pojawia się komunikat „Nie można uruchomić crawler.service. Nie znaleziono jednostki crawler.service”

Czy możesz mi w tym pomóc?

pozdrowienia

Juanjo Aguilella Marés
źródło
Brakuje pliku wykonywalnego php w / usr / bin / php? Sprawdź dzienniki, będziesz miał trochę informacji
Dom
2
Ubuntu 16.04 używa systemd. Dowiedz się, jak to działa, i zrób crawler.service.
Halfgaar,

Odpowiedzi:

15

Dodając do odpowiedzi @Juanjo Aguilella Marés, a po skopiowaniu / połączeniu skryptu /etc/systemd/systemmożesz chcieć automatycznie uruchomić go po uruchomieniu serwera:

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

Źródło Digital Ocean

Warto również nie uruchamiać go jako root. Po prostu zmień userwiersz w skrypcie:

[Service]
User=some_user
Andres
źródło
12

Rozwiązałem problem:

a) Utwórz plik crawler.service w / etc / systemd / system z tym kodem:

[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

mój plik bash zawiera różne wykonania równolegle do tego samego pliku php z tym kodem:

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

sen pomiędzy wykonaniami jest niezbędny, aby zapisać problem dotyczący szybkiego wykonania usługi.

Jeśli masz jakieś sugestie dotyczące rozwiązania, proszę o komentarz, nie mam dużego doświadczenia w plikach bash i plikach systemowych, ale w tej chwili działa dobrze.

Juanjo Aguilella Marés
źródło
4

1]. Aby utworzyć usługę, przejdź do / etc / systemd / system /

2]. Utwórz plik serviceName, np. ChatSocket.service

3]. Umieść treść w pliku, jak podano poniżej

[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]. Załaduj ponownie konfigurację, naciskając:

sudo systemctl daemon-reload

5]. Domyślnie włącz usługę, więc kiedy usługa uruchamiania systemu uruchomi się automatycznie:

sudo systemctl enable my_service.service

6]. Uruchom usługę za pomocą poniższego polecenia:

sudo systemctl start my_service.service

Shree29
źródło