Subindo serviços com /etc/rc.local como nos anos 80
Costumo usar o script /etc/rc.local
para subir serviços rapidamente durante o boot. É conveniente, simples e funciona bem no Debian e em outras distribuições Linux. Basicamente, é apenas um script sh (ou o shell que você preferir) que é executado durante o boot.
Curiosamente, o rc.local é considerado obsoleto desde o lançamento do UNIX System III, em 1983!
Desde então, diversas tentativas foram feitas para descontinuar esse arquivo. Ele não é recomendado há muito tempo em favor de soluções mais modernas para iniciar serviços durante o boot, mas ainda persiste. Se o arquivo /etc/rc.local
não existir no seu sistema, tente criá-lo e dar permissão de execução. Existe uma boa chance de o systemd reconhecer que você é totalmente old school e executar o rc.local normalmente durante o boot, inclusive esperando educadamente a rede ser ativada antes de rodá-lo (testado no Debian e no Ubuntu).
Por que usar o rc.local? Simplicidade. É apenas um script. Não é TOML, YAML, nem qualquer outro formato exótico de configuração. Sendo um script puro, permite que você faça qualquer tipo de hack que quiser.
Claro, ao utilizá-lo você abre mão de funcionalidades mais avançadas, como reinício automático e gerenciamento de dependências entre serviços.
O fato do rc.local ainda existir, mesmo sendo considerado obsoleto há mais de 40 anos, é prova de que simples sempre é melhor. Como diz o ditado: se não está quebrado, não conserte.
Abaixo está a configuração padrão do systemd que executa o rc.local durante o boot, tanto no Debian quanto no Ubuntu:
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=infinity
RemainAfterExit=yes
GuessMainPID=no
Ou seja, se o arquivo /etc/rc.local
existir e for executável, o systemd irá automaticamente.
Por padrão, esse serviço envia apenas o parâmetro “start” para o script /etc/rc.local
, mas você pode facilmente modificá-lo para aceitar outros parâmetros, como “stop”, deixando-o ainda mais próximo do clássico do SysV.