Crie o daemon no Ubuntu 16.04

10

Eu desenvolvi um rastreador no PHP que analisa uma URL com cabeçalhos específicos e coloca todas as URLs de conteúdo na fila. Funciona bem.

Eu desenvolvi este código em um Ubuntu 14.04 e coloquei um arquivo .conf na pasta / etc / init com este conteúdo:

# 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

Funciona bem no Ubuntu 14.04 e eu posso iniciar e parar o daemon usando o "sudo crawler service start" e o "sudo service crawler stop"

Agora, no ambiente de produção, tenho um servidor Ubuntu 16.04 e coloco o mesmo código na mesma pasta, mas quando tento iniciar o serviço, recebo a mensagem "Falha ao iniciar o crawler.service. Unit crawler.service não encontrado"

Você pode me dar alguma ajuda sobre isso?

Atenciosamente

    
por Juanjo Aguilella Marés 22.06.2016 / 11:32

4 respostas

9

Adicionando a @Juanjo Aguilella Marés responda, e depois de ter copiado / vinculado seu script a /etc/systemd/system , você pode querer iniciá-lo automaticamente quando o servidor for iniciado:

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

Fonte Oceano Digital

Também é uma boa idéia não executá-lo como root. Basta alterar a linha user no seu script:

[Service]
User=some_user
    
por 22.05.2017 / 18:28
10

Eu resolvi o problema:

a) Crie um arquivo crawler.service em / etc / systemd / system com este código:

[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

meu arquivo bash contém uma execução diferente em paralelo ao mesmo arquivo php com este código:

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

o sono entre execuções é necessário para salvar o problema sobre a execução tão rápido do serviço.

Se você tiver alguma sugestão sobre a solução, por favor, comente, eu não tenho muita experiência em arquivos bash e arquivos systemd, mas no momento funciona bem.

    
por 23.06.2016 / 12:18
5

O sistema init para 14.04 está pronto. O sistema init para 16.04 é systemd. Você deve converter seu script upstart para um arquivo de unidade systemd . Existem muitos outros recursos disponíveis também.

    
por 22.06.2016 / 11:51
0

1]. Para criar um serviço, vá para     / etc / systemd / system /

2]. Crie um arquivo de serviceName, por exemplo, chatSocket.service 3]. Coloque o conteúdo no arquivo conforme fornecido abaixo

[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/alphonso-platform/app/Http/Controllers/Fulfilment/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/alphonso-platform/app/Http/Controllers/Fulfilment/chatSocket.log #path to error log file
[Install]
WantedBy=default.target

4]. Recarregar configuração, batendo     sudo systemctl daemon-reload 5]. Ativar serviço por padrão, assim, quando o serviço de início do sistema for iniciado automaticamente     sudo systemctl ativar my_service.service 6]. Comece seu serviço usando o comando abaixo     sudo systemctl start my_service.service

    
por 19.02.2018 / 08:08