AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 785502
Accepted
Juanjo Aguilella Marés
Juanjo Aguilella Marés
Asked: 2016-06-23 01:32:46 +0800 CST2016-06-23 01:32:46 +0800 CST 2016-06-23 01:32:46 +0800 CST

Criar daemon no Ubuntu 16.04

  • 772

Desenvolvi um crawler em PHP que analisa uma URL com cabeçalhos específicos e coloca todas as URLs de conteúdo na fila. Funciona bem.

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 posso iniciar e parar o daemon usando "sudo service crawler start" e "sudo service crawler stop"

Agora em 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 crawler.service. Unidade crawler.service não encontrada"

Você pode me dar alguma ajuda sobre isso?

Cumprimentos

ubuntu daemon ubuntu-16.04
  • 4 4 respostas
  • 76643 Views

4 respostas

  • Voted
  1. Best Answer
    Andres
    2017-05-23T08:28:05+08:002017-05-23T08:28:05+08:00

    Adicionando à resposta de @Juanjo Aguilella Marés, e depois de copiar/vincular seu script para /etc/systemd/system, você pode querer iniciá-lo automaticamente quando o servidor iniciar:

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

    Fonte Oceano Digital

    Também é uma boa ideia não executá-lo como root. Basta alterar a userlinha do seu script:

    [Service]
    User=some_user
    
    • 15
  2. Juanjo Aguilella Marés
    2016-06-24T02:18:44+08:002016-06-24T02:18:44+08:00

    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 execuções diferentes 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 sleep entre as execuções é necessário para evitar o problema da execução tão rápida do serviço.

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

    • 13
  3. user9517
    2016-06-23T01:51:18+08:002016-06-23T01:51:18+08:00

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

    • 5
  4. Shree29
    2018-02-19T23:08:22+08:002018-02-19T23:08:22+08:00

    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 indicado 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/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]. Recarregue a configuração pressionando:

    sudo systemctl daemon-reload

    5]. Ative o serviço por padrão para que, quando o sistema iniciar, o serviço seja iniciado automaticamente:

    sudo systemctl enable my_service.service

    6]. Inicie seu serviço usando o comando abaixo:

    sudo systemctl start my_service.service

    • 4

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve