Como executar o comando toda vez que o servidor estiver vivo

0

Estou usando o Ubuntu 16.04 Server.

Eu quero executar um comando específico toda vez que o servidor for iniciado. Quero dizer que este comando deve ser executado quando o servidor é executado (trabalho contínuo).

Este comando está conectado ao framework PHP e inicia o aplicativo da web. Normalmente eu posso executar este comando indo para a pasta onde o aplicativo está localizado /var/www/html/app e então eu executo php artisan serve --host ipadress

Como fazer isso funcionar?

Obrigado antecipadamente!

    
por Martin 31.08.2016 / 11:02

2 respostas

0

Alguns programas não são projetados para serem executados com a entrada contínua do usuário e desconectados do terminal na primeira oportunidade. Por exemplo, um servidor da Web responde a solicitações da Web, em vez de entradas do usuário. Servidores de email são outro exemplo desse tipo de aplicativo. Esses tipos de programas são conhecidos como daemons. O termo daemon vem da mitologia grega e representa uma entidade que não é boa nem má, e que invisivelmente realiza tarefas úteis. É por isso que o mascote do BSD é o daemon de aparência alegre com tênis e um tridente.

Vamos usar o upstart:

Crie um arquivo chamado: /etc/init/my-http-server.conf

description "my-http-server"

start on (filesystem)
stop on runlevel [016]

respawn
#setuid my_user_id
#setgid my_group_id
#chdir /opt/my/env

exec <your command>

pre-start script
  mkdir -p /var/run/my/
  chown -R my:www-data /var/run/my  
end script

#post-start script
#  sleep 6
#  chmod 776 /var/run/my/.s.my
#end script

Para mais informações, consulte: documentos recentes .

Em seguida, use os comandos start / stop / restart para controlar seu daemon:

$ start my-http-server
$ stop my-http-server
$ restart my-http-server

Para uma lista completa das opções disponíveis para fazer um processo do daemon no Ubuntu 16.04: veja aqui

EDIT 1: Eu tenho algumas informações adicionais: O Ubuntu 16.04 vem com systemd .

Então, a melhor prática é fazer um daemon systemd. porque o rc.d, o init.d e o upstart serão obsoletos muito em breve!.

    
por 31.08.2016 / 11:38
2

Você pode criar uma entrada cron usando @reboot para essa finalidade. Será executado uma vez na inicialização.

Você pode colocar um arquivo em /etc/cron.d com este conteúdo:

 @reboot    root    cd /var/www/html/app && /usr/bin/php artisan serve --host ipaddress

Você deve mudar o root para um usuário diferente se o comando não precisar de privilégios de root.

Como alternativa, você pode executar crontab -e -u username para editar o crontab do usuário, que deve executar o comando e inserir esta linha nele:

 @reboot    cd /var/www/html/app && /usr/bin/php artisan serve --host ipaddress

Por causa do && , o comando só é executado se o cd for bem sucedido.

Atualizar : Se for um processo de servidor, é melhor usar um sistema init como o pylover indicado. Eu prefiro systemd no Ubuntu porque eles apenas mudaram para ele e eu não tenho certeza quanto tempo os outros (upstart) estarão disponíveis sem ter que instalar ou configurar nada. Um sistema de inicialização oferece a você o benefício de poder iniciar e parar o serviço e consultar seu status.

    
por 31.08.2016 / 11:22