Executar um script durante a inicialização no RHEL7

2

Um dos meus servidores é reiniciado todos os domingos e segundas de manhã, sempre que o servidor está ativo, preciso reiniciar o serviço. Na verdade eu chamo um script para se executar (toda vez manualmente). O que eu quero alcançar é que deve ser possível invocar este script para ser executado toda vez que o servidor for inicializado. Isso é possível?

O script que eu executo toda vez é algo assim:

cd /var/www/activefolder/current && RAILS_ENV=production script/delayed_job start

Como você pode ver, este script combina duas tarefas para concluir isso.

O sistema operacional do servidor é Redhat EL 7. Eu acho que até o 6, o sistema operacional usa init.d enquanto o RHEL7 introduz uma opção mais flexível chamada systemd. Mas não tenho certeza se é possível configurar como mencionei. Qualquer ajuda seria muito apreciada.

Não tenho certeza se dei a você todos os requisitos para responder a essa pergunta. Caso contrário, sinta-se à vontade para perguntar e atualizarei minha pergunta com as informações relevantes.

    
por serverstackqns 22.10.2014 / 14:19

4 respostas

4

Com base na documentação do Redhat Criando arquivos de unidade personalizada e systemd.exec - Configuração do ambiente de execução :

Não testado ™

Crie o arquivo (toque em > chmod > a edição parece recomendada, não sei por quê):

touch /etc/systemd/system/activefolder.service
chmod 664 /etc/systemd/system/activefolder.service
vim /etc/systemd/system/activefolder.service

/etc/systemd/system/activefolder.service exemplo:

[Unit]
Description=activefolder
After=network.target

[Service]
WorkingDirectory=/var/www/activefolder/current
ExecStart=/var/www/activefolder/current/script/delayed_job start
Type=forking
PIDFile=/run/activefolder.pid
Environment="RAILS_ENV=production"
#User=httpd
#Group=httpd

[Install]
WantedBy=default.target

Então:

systemctl daemon-reload
systemctl start name.service
    
por 13.03.2015 / 12:18
1

Você não precisa criar um serviço systemd para executar o comando na inicialização, isso pode ser feito com crontab .

Basta adicionar o comando que você precisa para executar com @reboot <user_name> prefixo no seu /etc/crontab

No seu caso, seria:

@reboot root cd /var/www/activefolder/current && RAILS_ENV=production script/delayed_job start

Testado para funcionar no CentOS 6/7 (requer vixie-cron , pode não funcionar com cronie )

    
por 10.01.2016 / 04:47
0

Adicionar os comandos no final de /etc/rc.local ainda parece funcionar também.

(Certifique-se de que é executável, no entanto.)

    
por 14.07.2016 / 12:37
-1

Existe uma grande flexibilidade em todas as distribuições Linux em geral para executar scripts, códigos ou outros programas em scripts de inicialização, arquivos de configuração (via include), etc ..., contanto que o script, o arquivo de configuração ou qualquer outro use está em um contexto de segurança que permite isso.

Dependendo do que seu código precisa realizar, talvez seja necessário executá-lo depois que um determinado serviço for iniciado ou antes de outro. Em alguns casos, basta colocá-lo no /etc/rc.local não é suficiente. Se você precisar de mais controle sobre a maneira como seu código é executado devido à sua própria natureza, será necessário entender como os scripts de inicialização são acionados, quais níveis de execução são, etc. São bons locais para começar:

Para sistemas baseados em init (RHEL < 7): link

Para sistemas systemd (RHEL > = 7): link

    
por 14.07.2016 / 13:02