Eu sou novo no linux e tenho me testado usando uma instância do Amazon Lightsail (Ubuntu 16.04 LTS).
Percorrendo os vários guias que encontrei, vejo pessoas usando comandos diferentes para iniciar / parar / reiniciar / recarregar / verificar o status de um serviço. Especificamente estes;
sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status
Todos os comandos acima funcionam.
- Devo preferir um comando ao outro?
- Se sim, por que?
- Existem outros comandos que eu preciso conhecer?
O uso do init.d no Monit causou problemas quando eu quis usar a opção status (o status será que o serviço está offline quando na verdade estava online - reiniciado pelo Monit). Altere o código no Monit de inid.d para / bin / systemctl corrigido.
Parece que o uso do init.d fornece mais informações sobre o que aconteceu com os outros. Se eu deveria estar usando um dos outros comandos, é possível que eles exibam mais informações sobre o que foi feito?
ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$
Gostaria de agradecer antecipadamente a todos que se dispuseram a ler e responder a esta pergunta.
fonte
systemctl
é a sintaxe preferida eservice
é fornecida como compatibilidade com versões anteriores./etc/init.d/pure-ftpd
ou similares estão chamando os scripts de start / stop diretamente.Respostas:
Para começar, há toda uma história e luta entre ir de e
SysVInit
paraSystemD
. Em vez de tentar resumir tudo isso em uma resposta, refiro-lhe a alguns sites do Google que se aventuram para obter mais detalhes sobre a história, além de um artigo específico sobre o assunto:http://www.tecmint.com/systemd-replaces-init-in-linux/
Em resumo, porém, tem sido uma transição lenta e árdua. Alguns recursos herdados foram mantidos intactos (como
init.d
até certo ponto). Se você tiver a opção de usarsystemctl
para o seu controle de serviço, recomendo usá-lo. É o futuro previsível para Linux e, eventualmente,SysVInit
métodos mais antigos serão considerados totalmente obsoletos e removidos.Para cobrir cada um que você listou especificamente:
sudo systemctl status apache2.service
Essa é a nova
SystemD
abordagem para lidar com serviços. No futuro, os aplicativos no Linux foram projetados para usar o método systemd, e não qualquer outro.sudo /bin/systemctl status apache2.service
É a mesma coisa que o comando anterior. A única diferença nesse caso é que não depende da
$PATH
variável de ambiente do shell para encontrar o comando, ele está listando explicitamente o comando, incluindo o caminho para o comando.sudo /etc/init.d/apache2 status
Este é o
SysVInit
método original de chamar um serviço. Os scripts de inicialização seriam gravados para um serviço e colocados nesse diretório. Embora esse método ainda seja usado por muitos,service
foi o comando que substituiu esse método de chamar serviçosSysVInit
. Existem algumas funcionalidades herdadas para isso em sistemasSystemD
mais recentes, mas a maioria dos programas mais recentes não inclui isso, e nem todos os scripts de inicialização de aplicativos mais antigos funcionam com ele.sudo service apache2 status
Essa foi a principal ferramenta usada nos
SysVInit
sistemas para serviços. Em alguns casos, apenas vinculou aos/etc/init.d/
scripts, mas em outros casos foi para um script init armazenado em outro local. O objetivo era fornecer uma transição mais suave para o tratamento de dependências de serviço.Por fim, você menciona que deseja saber como obter mais informações dos comandos, pois alguns fornecem mais informações que outros. Isso quase sempre é determinado pelo aplicativo e como eles projetaram seu arquivo de inicialização ou serviço. Como regra geral, porém, se concluído silenciosamente, foi bem-sucedido. No entanto, para verificar um
start
,stop
ourestart
, você pode usar ostatus
sub-comando para ver como ele está fazendo. Você mencionou umstatus
comando incorreto em um script init antigo. Esse é um bug que os desenvolvedores de aplicativos precisariam examinar. No entanto, como os scripts init estão se tornando o método descontinuado de manipulação de serviços, eles podem simplesmente ignorar o erro até remover completamente a opção de script init. osystemctl status
sempre deve funcionar corretamente, caso contrário, um bug deve ser registrado com os desenvolvedores do aplicativo.fonte
systemctl
procurará nos diretórios onde os arquivos de serviço estão armazenados e adicionará o ".service" para você, se o encontrar. Por exemplo, se você pressionar a tecla tab uma vez depois de escreversudo systemctl status apache2
, deverá concluí-la adicionando.service
para você. Se houver mais de um arquivo systemctl apache2 (como.service
e.target
você tem que guia hit duas vezes para que ele mostra todas as opções disponíveis.