{"id":1588,"date":"2026-07-16T18:10:35","date_gmt":"2026-07-16T21:10:35","guid":{"rendered":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/"},"modified":"2026-07-16T18:10:35","modified_gmt":"2026-07-16T21:10:35","slug":"aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs","status":"publish","type":"post","link":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/","title":{"rendered":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD"},"content":{"rendered":"<p>O gerenciamento de servi\u00e7os \u00e9 uma das tarefas mais cr\u00edticas na administra\u00e7\u00e3o de qualquer sistema operacional. No FreeBSD, essa responsabilidade recai sobre o sistema <strong>rc.d<\/strong> \u2014 um framework maduro, modular e incrivelmente flex\u00edvel que controla como os servi\u00e7os s\u00e3o iniciados, parados, reiniciados e monitorados durante o boot e ao longo da opera\u00e7\u00e3o do sistema. Dominar os <strong>rc.d e startup scripts<\/strong> significa assumir o controle total sobre o comportamento do seu servidor, garantindo que cada servi\u00e7o essencial esteja dispon\u00edvel exatamente quando necess\u00e1rio e na ordem correta. Nesta aula, vamos desmontar esse mecanismo pe\u00e7a por pe\u00e7a, desde a teoria fundamental at\u00e9 a cria\u00e7\u00e3o de scripts personalizados prontos para produ\u00e7\u00e3o.<\/p>\n<p>Por que este conhecimento \u00e9 t\u00e3o importante? Imagine um servidor que precisa iniciar o banco de dados PostgreSQL antes da aplica\u00e7\u00e3o web, ou um firewall que deve estar completamente ativo antes de qualquer interface de rede aceitar tr\u00e1fego externo. Sem um controle refinado de depend\u00eancias e ordena\u00e7\u00e3o, voc\u00ea corre o risco de enfrentar falhas intermitentes, timeouts misteriosos e servi\u00e7os que simplesmente n\u00e3o sobem ap\u00f3s um reboot. O <strong>rc.d<\/strong> resolve esses problemas com um sistema de depend\u00eancias declarativo, palavras-chave padronizadas e uma hierarquia de diret\u00f3rios que permite tanto a configura\u00e7\u00e3o global quanto ajustes por servi\u00e7o. Em nossos projetos na JRT Technology Solutions, utilizamos diariamente scripts rc.d customizados para integrar aplica\u00e7\u00f5es legadas, monitorar processos cr\u00edticos e garantir que ambientes de alta disponibilidade iniciem de forma previs\u00edvel e ordenada.<\/p>\n<p>Ao final desta aula, voc\u00ea ser\u00e1 capaz de analisar qualquer script <strong>rc.d<\/strong> existente, modificar seu comportamento atrav\u00e9s de vari\u00e1veis no <strong>\/etc\/rc.conf<\/strong>, criar do zero um script de inicializa\u00e7\u00e3o para uma aplica\u00e7\u00e3o personalizada, depurar problemas de boot com o modo verbose e implementar verifica\u00e7\u00f5es de sa\u00fade (health checks) que impedem a inicializa\u00e7\u00e3o de servi\u00e7os em condi\u00e7\u00f5es inadequadas. Vamos trabalhar com exemplos reais, como um servi\u00e7o web em Python e um daemon de monitoramento, que voc\u00ea poder\u00e1 adaptar imediatamente para o seu ambiente.<\/p>\n<p>Esta \u00e9 a Aula 14 do curso <strong>&#8220;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&#8221;<\/strong>, e ela marca nossa entrada no territ\u00f3rio intermedi\u00e1rio-avan\u00e7ado da administra\u00e7\u00e3o do sistema. Se voc\u00ea concluiu as aulas anteriores, j\u00e1 possui uma base s\u00f3lida em instala\u00e7\u00e3o, gerenciamento de pacotes, sistema de arquivos ZFS e configura\u00e7\u00e3o de rede. Agora, vamos unir esses conhecimentos para construir uma infraestrutura de servi\u00e7os robusta, preparada para os desafios do mundo real. Prepare seu terminal, acesse seu ambiente FreeBSD (m\u00e1quina f\u00edsica, VM ou jail) e vamos mergulhar fundo no cora\u00e7\u00e3o do boot do FreeBSD.<\/p>\n<h3>O que voc\u00ea vai aprender nesta aula<\/h3>\n<ul>\n<li>Compreender a arquitetura do sistema <strong>rc.d<\/strong> e seu papel no boot do FreeBSD<\/li>\n<li>Diferenciar os diret\u00f3rios <strong>\/etc\/rc.d<\/strong>, <strong>\/usr\/local\/etc\/rc.d<\/strong> e a ordem de preced\u00eancia entre eles<\/li>\n<li>Ler e interpretar scripts rc.d existentes, identificando palavras-chave como <strong>PROVIDE<\/strong>, <strong>REQUIRE<\/strong> e <strong>BEFORE<\/strong><\/li>\n<li>Configurar servi\u00e7os atrav\u00e9s das vari\u00e1veis no arquivo <strong>\/etc\/rc.conf<\/strong> e nos arquivos sob <strong>\/etc\/rc.conf.d\/<\/strong><\/li>\n<li>Criar um script <strong>rc.d<\/strong> personalizado completo, com suporte a start, stop, restart e status<\/li>\n<li>Implementar verifica\u00e7\u00f5es de pr\u00e9-inicializa\u00e7\u00e3o (health checks) em scripts customizados<\/li>\n<li>Depurar problemas de inicializa\u00e7\u00e3o usando <strong>rc_debug<\/strong> e o modo verbose<\/li>\n<li>Utilizar o comando <strong>service<\/strong> e <strong>sysrc<\/strong> para gerenciamento di\u00e1rio de servi\u00e7os<\/li>\n<li>Aplicar boas pr\u00e1ticas de seguran\u00e7a, logging e ordena\u00e7\u00e3o de depend\u00eancias<\/li>\n<\/ul>\n<h3>Pr\u00e9-requisitos e Ambiente<\/h3>\n<p>Para aproveitar ao m\u00e1ximo esta aula, voc\u00ea precisar\u00e1 de um sistema FreeBSD 13.2 ou superior instalado e funcional \u2014 pode ser uma instala\u00e7\u00e3o bare-metal, uma m\u00e1quina virtual ou uma jail. \u00c9 essencial ter acesso root ou privil\u00e9gios de superusu\u00e1rio, pois manipularemos arquivos em <strong>\/etc\/rc.d\/<\/strong>, <strong>\/usr\/local\/etc\/rc.d\/<\/strong> e editaremos o <strong>\/etc\/rc.conf<\/strong>. Voc\u00ea tamb\u00e9m deve estar confort\u00e1vel com o uso do editor de texto <strong>vi<\/strong> ou <strong>ee<\/strong> (recomendamos o <strong>ee<\/strong> para iniciantes, por sua interface mais amig\u00e1vel). Conhecimentos b\u00e1sicos de shell script (estruturas if\/then, vari\u00e1veis, fun\u00e7\u00f5es) ser\u00e3o \u00fateis, mas explicaremos cada constru\u00e7\u00e3o \u00e0 medida que aparecerem. Por fim, recomendo que voc\u00ea tenha conclu\u00eddo a Aula 13 sobre gerenciamento de pacotes e ports, pois faremos refer\u00eancia a servi\u00e7os instalados via <strong>pkg<\/strong>.<\/p>\n<h3>Arquitetura do sistema rc.d \u2014 como o FreeBSD organiza a inicializa\u00e7\u00e3o<\/h3>\n<p>O sistema de inicializa\u00e7\u00e3o do FreeBSD \u00e9 radicalmente diferente do System V init encontrado em distribui\u00e7\u00f5es Linux mais antigas, e tamb\u00e9m difere do systemd adotado pela maioria das distribui\u00e7\u00f5es modernas. O <strong>rc.d<\/strong> (que significa &#8220;run command dot d&#8221;, seguindo a conven\u00e7\u00e3o de diret\u00f3rios Unix) \u00e9 um framework baseado em scripts shell que opera sobre o <strong>\/etc\/rc<\/strong> \u2014 o script principal de inicializa\u00e7\u00e3o. Quando o kernel termina de carregar, ele invoca o <strong>init<\/strong> (PID 1), que por sua vez executa o <strong>\/etc\/rc<\/strong>. Este script percorre todos os arquivos nos diret\u00f3rios de scripts <strong>rc.d<\/strong>, ordenando-os com base em depend\u00eancias declaradas e executando cada um com o argumento <strong>start<\/strong>.<\/p>\n<p>Existem dois diret\u00f3rios principais que armazenam scripts rc.d: <strong>\/etc\/rc.d\/<\/strong>, que cont\u00e9m scripts para servi\u00e7os do sistema base (como <strong>netif<\/strong>, <strong>routing<\/strong>, <strong>sshd<\/strong>, <strong>syslogd<\/strong>), e <strong>\/usr\/local\/etc\/rc.d\/<\/strong>, que armazena scripts para aplica\u00e7\u00f5es de terceiros instaladas via ports ou pacotes (por exemplo, <strong>nginx<\/strong>, <strong>postgresql<\/strong>, <strong>mysql<\/strong>). Uma regra fundamental: <strong>nunca modifique scripts em \/etc\/rc.d\/<\/strong>. Esses scripts s\u00e3o parte do sistema base e ser\u00e3o sobrescritos em atualiza\u00e7\u00f5es. Para customizar o comportamento de servi\u00e7os do sistema, utilize vari\u00e1veis no <strong>\/etc\/rc.conf<\/strong>. Scripts personalizados que voc\u00ea criar devem sempre residir em <strong>\/usr\/local\/etc\/rc.d\/<\/strong>.<\/p>\n<p>A m\u00e1gica da ordena\u00e7\u00e3o acontece atrav\u00e9s de palavras-chave especiais inseridas como coment\u00e1rios estruturados no in\u00edcio de cada script. Essas palavras-chave \u2014 <strong>PROVIDE<\/strong>, <strong>REQUIRE<\/strong>, <strong>BEFORE<\/strong>, <strong>KEYWORD<\/strong> \u2014 s\u00e3o analisadas pelo utilit\u00e1rio <strong>rcorder<\/strong>, que constr\u00f3i um grafo de depend\u00eancias e determina a sequ\u00eancia exata de inicializa\u00e7\u00e3o. Por exemplo, o script do SSH (<strong>\/etc\/rc.d\/sshd<\/strong>) declara <strong>REQUIRE: LOGIN cleanvar<\/strong>, indicando que ele precisa que os servi\u00e7os <strong>LOGIN<\/strong> e <strong>cleanvar<\/strong> sejam iniciados antes. Isso garante que o SSH s\u00f3 seja ativado depois que o sistema de arquivos estiver limpo e os daemons de login estiverem prontos.<\/p>\n<p>Al\u00e9m das depend\u00eancias, o <strong>rc.d<\/strong> implementa um conceito elegante de &#8220;facilidades abstratas&#8221;. Um script pode declarar <strong>PROVIDE: DAEMON<\/strong> (uma facilidade gen\u00e9rica que representa &#8220;algum tipo de daemon est\u00e1 rodando&#8221;), e outro script pode declarar <strong>REQUIRE: DAEMON<\/strong>, garantindo que todos os servi\u00e7os que prov\u00eam essa facilidade sejam iniciados primeiro. Isso cria um sistema de namespaces que desacopla scripts espec\u00edficos de depend\u00eancias r\u00edgidas, tornando o framework extremamente flex\u00edvel. Em nossos projetos na JRT Technology Solutions, frequentemente utilizamos facilidades customizadas como <strong>PROVIDE: app_db_ready<\/strong> para coordenar a inicializa\u00e7\u00e3o de stacks complexos.<\/p>\n<h3>Anatomia de um script rc.d \u2014 dissecando cada se\u00e7\u00e3o<\/h3>\n<p>Antes de criarmos nosso pr\u00f3prio script, vamos examinar detalhadamente um exemplo real. O script <strong>\/usr\/local\/etc\/rc.d\/nginx<\/strong> (instalado pelo pacote <strong>nginx<\/strong>) \u00e9 um excelente modelo. Abra-o com <strong>cat \/usr\/local\/etc\/rc.d\/nginx<\/strong> e observe sua estrutura. Todo script rc.d \u00e9 um shell script que segue um template r\u00edgido, garantindo consist\u00eancia e previsibilidade em todo o ecossistema FreeBSD.<\/p>\n<pre><code>#!\/bin\/sh\n\n# PROVIDE: nginx\n# REQUIRE: LOGIN cleanvar\n# KEYWORD: shutdown\n\n. \/etc\/rc.subr\n\nname=\"nginx\"\nrcvar=\"nginx_enable\"\ncommand=\"\/usr\/local\/sbin\/${name}\"\npidfile=\"\/var\/run\/${name}.pid\"\nrequired_files=\"\/usr\/local\/etc\/${name}.conf\"\n\nload_rc_config $name\nrun_rc_command \"$1\"<\/code><\/pre>\n<p>Vamos analisar cada linha deste script. A primeira linha (<strong>#!\/bin\/sh<\/strong>) \u00e9 o shebang padr\u00e3o \u2014 scripts rc.d devem usar <strong>\/bin\/sh<\/strong>, n\u00e3o bash ou outro shell. As tr\u00eas linhas seguintes (iniciadas com <strong>#<\/strong>) s\u00e3o as palavras-chave que o <strong>rcorder<\/strong> l\u00ea: <strong>PROVIDE: nginx<\/strong> declara que este script prov\u00ea o servi\u00e7o &#8220;nginx&#8221;; <strong>REQUIRE: LOGIN cleanvar<\/strong> indica depend\u00eancias; <strong>KEYWORD: shutdown<\/strong> significa que este script deve ser executado tamb\u00e9m durante o desligamento (com argumento <strong>stop<\/strong>). Note que o <strong>#<\/strong> antes de PROVIDE\/REQUIRE\/KEYWORD n\u00e3o \u00e9 um coment\u00e1rio comum \u2014 o <strong>rcorder<\/strong> especificamente procura por essas linhas.<\/p>\n<p>A linha <strong>. \/etc\/rc.subr<\/strong> (o ponto seguido de espa\u00e7o carrega o arquivo no shell atual, similar ao <strong>source<\/strong>) \u00e9 o cora\u00e7\u00e3o do framework. O arquivo <strong>\/etc\/rc.subr<\/strong> cont\u00e9m todas as fun\u00e7\u00f5es auxiliares que os scripts rc.d utilizam: <strong>load_rc_config<\/strong>, <strong>run_rc_command<\/strong>, <strong>checkyesno<\/strong>, entre outras. Sem este arquivo, voc\u00ea teria que implementar manualmente toda a l\u00f3gica de parsing do <strong>rc.conf<\/strong>, verifica\u00e7\u00e3o de PID files, e manipula\u00e7\u00e3o de sinais. A beleza do sistema \u00e9 que voc\u00ea s\u00f3 precisa definir vari\u00e1veis e chamar essas fun\u00e7\u00f5es \u2014 o trabalho pesado j\u00e1 est\u00e1 pronto.<\/p>\n<p>As vari\u00e1veis <strong>name<\/strong>, <strong>rcvar<\/strong>, <strong>command<\/strong>, <strong>pidfile<\/strong> e <strong>required_files<\/strong> s\u00e3o defini\u00e7\u00f5es padronizadas que o <strong>rc.subr<\/strong> utiliza. <strong>name<\/strong> \u00e9 o nome base do servi\u00e7o; <strong>rcvar<\/strong> \u00e9 a vari\u00e1vel que ser\u00e1 verificada no <strong>rc.conf<\/strong> para determinar se o servi\u00e7o deve iniciar (por conven\u00e7\u00e3o, sempre <strong>nome_enable<\/strong>); <strong>command<\/strong> \u00e9 o caminho completo para o bin\u00e1rio do daemon; <strong>pidfile<\/strong> \u00e9 onde o PID do processo ser\u00e1 armazenado; <strong>required_files<\/strong> lista arquivos que devem existir antes da inicializa\u00e7\u00e3o \u2014 se algum n\u00e3o for encontrado, o script aborta com erro. Finalmente, <strong>load_rc_config<\/strong> carrega as configura\u00e7\u00f5es do <strong>rc.conf<\/strong> e <strong>run_rc_command<\/strong> executa a a\u00e7\u00e3o solicitada (start, stop, restart, status, etc.).<\/p>\n<p>Uma caracter\u00edstica importante: observe que n\u00e3o h\u00e1 fun\u00e7\u00f5es expl\u00edcitas <strong>start_cmd<\/strong>, <strong>stop_cmd<\/strong> ou <strong>status_cmd<\/strong> neste script. O <strong>rc.subr<\/strong> fornece implementa\u00e7\u00f5es padr\u00e3o inteligentes que funcionam para a maioria dos daemons Unix tradicionais \u2014 elas utilizam o <strong>pidfile<\/strong> para gerenciar o processo e enviam sinais apropriados. Voc\u00ea s\u00f3 precisa sobrescrever esses m\u00e9todos quando seu servi\u00e7o exigir um tratamento especial (um processo em foreground que n\u00e3o cria pidfile, um script Python, ou um comando que requer flags adicionais). Veremos como fazer essas customiza\u00e7\u00f5es na pr\u00f3xima se\u00e7\u00e3o.<\/p>\n<h3>Criando seu primeiro script rc.d personalizado \u2014 servi\u00e7o Python de exemplo<\/h3>\n<p>Vamos agora colocar a teoria em pr\u00e1tica. Criaremos um script <strong>rc.d<\/strong> para um servi\u00e7o web simples escrito em Python que servir\u00e1 uma API de monitoramento. Escolhemos Python deliberadamente porque ele ilustra um caso comum: um daemon que n\u00e3o cria seu pr\u00f3prio pidfile, que roda em foreground e que requer argumentos espec\u00edficos na linha de comando. Este exemplo \u00e9 diretamente aplic\u00e1vel a aplica\u00e7\u00f5es Node.js, Ruby, Go ou qualquer outra linguagem que voc\u00ea utilize em produ\u00e7\u00e3o.<\/p>\n<p><strong>Passo 1:<\/strong> Primeiro, crie a aplica\u00e7\u00e3o Python de exemplo. Vamos posicion\u00e1-la em <strong>\/usr\/local\/bin\/monitor-api.py<\/strong>.<\/p>\n<pre><code>#!\/usr\/local\/bin\/python3\n\nimport http.server\nimport json\nimport os\nimport signal\nimport sys\n\nclass MonitorHandler(http.server.BaseHTTPRequestHandler):\n    def do_GET(self):\n        if self.path == '\/health':\n            self.send_response(200)\n            self.send_header('Content-Type', 'application\/json')\n            self.end_headers()\n            response = {\"status\": \"healthy\", \"service\": \"monitor-api\"}\n            self.wfile.write(json.dumps(response).encode())\n        else:\n            self.send_response(404)\n            self.end_headers()\n\ndef sigterm_handler(signum, frame):\n    print(\"Recebido sinal de t\u00e9rmino, encerrando...\")\n    sys.exit(0)\n\nsignal.signal(signal.SIGTERM, sigterm_handler)\n\nif __name__ == '__main__':\n    port = int(os.environ.get('MONITOR_PORT', 8080))\n    server = http.server.HTTPServer(('127.0.0.1', port), MonitorHandler)\n    print(f\"Monitor API iniciada na porta {port}\")\n    server.serve_forever()<\/code><\/pre>\n<p>Este c\u00f3digo cria um servidor HTTP simples que responde a requisi\u00e7\u00f5es <strong>GET \/health<\/strong> com um JSON indicando que o servi\u00e7o est\u00e1 saud\u00e1vel. A porta pode ser configurada via vari\u00e1vel de ambiente <strong>MONITOR_PORT<\/strong>, com padr\u00e3o 8080. O tratamento de <strong>SIGTERM<\/strong> garante um encerramento limpo quando o rc.d enviar o sinal de stop. Torne o arquivo execut\u00e1vel com:<\/p>\n<pre><code>chmod +x \/usr\/local\/bin\/monitor-api.py<\/code><\/pre>\n<p><strong>Passo 2:<\/strong> Agora, crie o script rc.d em <strong>\/usr\/local\/etc\/rc.d\/monitor_api<\/strong>. Este nome de arquivo \u00e9 importante \u2014 por conven\u00e7\u00e3o, use snake_case e evite extens\u00f5es.<\/p>\n<pre><code>#!\/bin\/sh\n\n# PROVIDE: monitor_api\n# REQUIRE: DAEMON NETWORKING\n# KEYWORD: shutdown\n\n. \/etc\/rc.subr\n\nname=\"monitor_api\"\nrcvar=\"monitor_api_enable\"\npidfile=\"\/var\/run\/${name}.pid\"\ncommand=\"\/usr\/sbin\/daemon\"\ncommand_args=\"-p ${pidfile} -o \/var\/log\/${name}.log \/usr\/local\/bin\/monitor-api.py\"\nrequired_files=\"\/usr\/local\/bin\/monitor-api.py\"\nexport MONITOR_PORT=8080\n\nload_rc_config $name\nrun_rc_command \"$1\"<\/code><\/pre>\n<p>Vamos analisar as decis\u00f5es de design neste script. Em vez de apontar <strong>command<\/strong> diretamente para o script Python, utilizamos o <strong>\/usr\/sbin\/daemon<\/strong> \u2014 um utilit\u00e1rio nativo do FreeBSD que transforma qualquer processo foreground em um daemon de background, gerenciando o pidfile automaticamente. A flag <strong>-p ${pidfile}<\/strong> instrui o <strong>daemon<\/strong> a escrever o PID no arquivo especificado. A flag <strong>-o \/var\/log\/${name}.log<\/strong> redireciona stdout e stderr para um arquivo de log, essencial para debugging. O restante da linha ap\u00f3s essas flags \u00e9 o comando real que ser\u00e1 executado \u2014 nosso script Python.<\/p>\n<p>A diretiva <strong>export MONITOR_PORT=8080<\/strong> define a vari\u00e1vel de ambiente antes da execu\u00e7\u00e3o do daemon. Poder\u00edamos tamb\u00e9m usar <strong>monitor_api_flags<\/strong> no <strong>\/etc\/rc.conf<\/strong> para passar argumentos adicionais. A linha <strong>required_files<\/strong> garante que o script Python exista antes de tentar iniciar o servi\u00e7o, fornecendo uma verifica\u00e7\u00e3o de sanidade b\u00e1sica. Note que <strong>REQUIRE: DAEMON NETWORKING<\/strong> garante que o stack de rede esteja operacional e que outros daemons b\u00e1sicos j\u00e1 tenham iniciado.<\/p>\n<p><strong>Passo 3:<\/strong> Torne o script execut\u00e1vel e configure o sistema para iniciar o servi\u00e7o:<\/p>\n<pre><code>chmod +x \/usr\/local\/etc\/rc.d\/monitor_api\nsysrc monitor_api_enable=\"YES\"<\/code><\/pre>\n<p>O comando <strong>sysrc<\/strong> \u00e9 uma ferramenta segura para editar o <strong>\/etc\/rc.conf<\/strong> \u2014 ele evita duplicatas e preserva a formata\u00e7\u00e3o. Voc\u00ea pode verificar a configura\u00e7\u00e3o com <strong>sysrc -a | grep monitor<\/strong> ou simplesmente com <strong>cat \/etc\/rc.conf | grep monitor<\/strong>.<\/p>\n<h3>Configura\u00e7\u00e3o detalhada via \/etc\/rc.conf e rc.conf.d<\/h3>\n<p>O arquivo <strong>\/etc\/rc.conf<\/strong> \u00e9 o ponto central de configura\u00e7\u00e3o de inicializa\u00e7\u00e3o no FreeBSD. Nele, voc\u00ea define quais servi\u00e7os iniciam, com quais par\u00e2metros e em quais condi\u00e7\u00f5es. Para o nosso servi\u00e7o <strong>monitor_api<\/strong>, j\u00e1 adicionamos a vari\u00e1vel obrigat\u00f3ria <strong>monitor_api_enable=&#8221;YES&#8221;<\/strong>. Mas o sistema permite muito mais refinamento. Voc\u00ea pode, por exemplo, definir flags adicionais ou sobrescrever o local do pidfile:<\/p>\n<pre><code># \/etc\/rc.conf \u2014 configura\u00e7\u00e3o completa para o servi\u00e7o monitor_api\nmonitor_api_enable=\"YES\"\nmonitor_api_flags=\"-t monitor_api\"           # tag para identificar no ps\nmonitor_api_pidfile=\"\/var\/run\/monitor_api.pid\"<\/code><\/pre>\n<p>Qualquer vari\u00e1vel definida no script rc.d pode ser sobrescrita no <strong>\/etc\/rc.conf<\/strong> prefixando-a com o nome do servi\u00e7o e um underscore. Se no script definimos <strong>pidfile=&#8221;\/var\/run\/${name}.pid&#8221;<\/strong>, no <strong>rc.conf<\/strong> podemos definir <strong>monitor_api_pidfile=&#8221;\/var\/run\/alt\/monitor_api.pid&#8221;<\/strong> para alterar esse valor. Esta \u00e9 a forma correta de customizar servi\u00e7os sem modificar os scripts originais. O <strong>rc.subr<\/strong> l\u00ea todas as vari\u00e1veis do <strong>rc.conf<\/strong> que correspondem ao padr\u00e3o <strong>${name}_*<\/strong> e as aplica ao ambiente do script.<\/p>\n<p>A partir do FreeBSD 12, uma alternativa elegante para organizar configura\u00e7\u00f5es \u00e9 o diret\u00f3rio <strong>\/etc\/rc.conf.d\/<\/strong>. Em vez de poluir o <strong>\/etc\/rc.conf<\/strong> com configura\u00e7\u00f5es de dezenas de servi\u00e7os, voc\u00ea pode criar arquivos individuais: <strong>\/etc\/rc.conf.d\/monitor_api<\/strong> conteria apenas vari\u00e1veis relacionadas a este servi\u00e7o. O <strong>load_rc_config<\/strong> procura automaticamente por esses arquivos e os carrega ap\u00f3s o <strong>\/etc\/rc.conf<\/strong>, permitindo sobrescritas. Em ambientes gerenciados pela JRT Technology Solutions, implementamos essa pr\u00e1tica como padr\u00e3o para facilitar o versionamento e a automa\u00e7\u00e3o com Ansible ou Puppet.<\/p>\n<pre><code># \/etc\/rc.conf.d\/monitor_api \u2014 arquivo dedicado de configura\u00e7\u00e3o\nmonitor_api_enable=\"YES\"\nmonitor_api_flags=\"-t monitor_api\"\nexport MONITOR_PORT=9090<\/code><\/pre>\n<p>A capacidade de usar <strong>export<\/strong> diretamente nestes arquivos (como na \u00faltima linha acima) permite configurar vari\u00e1veis de ambiente sem modificar o script rc.d. Isso \u00e9 particularmente \u00fatil para aplica\u00e7\u00f5es Twelve-Factor App que recebem configura\u00e7\u00e3o via ambiente.<\/p>\n<h3>Testando e verificando a configura\u00e7\u00e3o do servi\u00e7o<\/h3>\n<p>Com o script criado e configurado, \u00e9 hora de testar. O FreeBSD oferece v\u00e1rias camadas de verifica\u00e7\u00e3o que permitem validar tudo antes mesmo de reiniciar o sistema. Vamos executar cada comando e analisar as sa\u00eddas esperadas.<\/p>\n<p><strong>Teste 1 \u2014 Verifica\u00e7\u00e3o de sintaxe do script:<\/strong><\/p>\n<pre><code>sh -n \/usr\/local\/etc\/rc.d\/monitor_api<\/code><\/pre>\n<p>O comando <strong>sh -n<\/strong> verifica a sintaxe do shell script sem execut\u00e1-lo. Se n\u00e3o houver sa\u00edda, a sintaxe est\u00e1 correta. Erros comuns incluem esquecer de fechar aspas ou par\u00eanteses. Este teste r\u00e1pido evita dores de cabe\u00e7a durante o boot.<\/p>\n<p><strong>Teste 2 \u2014 Inicializa\u00e7\u00e3o manual com sa\u00edda verbose:<\/strong><\/p>\n<pre><code>service monitor_api onestart<\/code><\/pre>\n<p>A a\u00e7\u00e3o <strong>onestart<\/strong> \u00e9 especial: ela inicia o servi\u00e7o mesmo que a vari\u00e1vel <strong>monitor_api_enable<\/strong> n\u00e3o esteja definida como &#8220;YES&#8221;. \u00c9 ideal para testes antes de habilitar permanentemente. Veja a sa\u00edda esperada:<\/p>\n<pre><code class=\"output\">Starting monitor_api.\nMonitor API iniciada na porta 8080<\/code><\/pre>\n<p><strong>Teste 3 \u2014 Verifica\u00e7\u00e3o de status:<\/strong><\/p>\n<pre><code>service monitor_api status<\/code><\/pre>\n<pre><code class=\"output\">monitor_api is running as pid 12345.<\/code><\/pre>\n<p><strong>Teste 4 \u2014 Verifica\u00e7\u00e3o do pidfile e do processo:<\/strong><\/p>\n<pre><code>cat \/var\/run\/monitor_api.pid\nps aux | grep monitor_api<\/code><\/pre>\n<p>O primeiro comando deve mostrar o n\u00famero do PID armazenado. O segundo deve listar o processo <strong>daemon<\/strong> supervisionando o script Python, e o pr\u00f3prio processo Python como filho. Note que o <strong>daemon<\/strong> aparece como processo pai \u2014 isso \u00e9 normal e esperado.<\/p>\n<p><strong>Teste 5 \u2014 Teste funcional do servi\u00e7o:<\/strong><\/p>\n<pre><code>curl http:\/\/127.0.0.1:8080\/health<\/code><\/pre>\n<pre><code class=\"output\">{\"status\": \"healthy\", \"service\": \"monitor-api\"}<\/code><\/pre>\n<p><strong>Teste 6 \u2014 Parada do servi\u00e7o:<\/strong><\/p>\n<pre><code>service monitor_api stop<\/code><\/pre>\n<pre><code class=\"output\">Stopping monitor_api.\nWaiting for PIDS: 12345.<\/code><\/pre>\n<p><strong>Teste 7 \u2014 Reinicializa\u00e7\u00e3o completa:<\/strong><\/p>\n<pre><code>service monitor_api restart<\/code><\/pre>\n<pre><code class=\"output\">Stopping monitor_api.\nWaiting for PIDS: 12345.\nStarting monitor_api.\nMonitor API iniciada na porta 8080<\/code><\/pre>\n<h3>Debugging avan\u00e7ado \u2014 modo verbose e rc_debug<\/h3>\n<p>Quando um servi\u00e7o falha silenciosamente durante o boot, o modo verbose \u00e9 sua ferramenta de investiga\u00e7\u00e3o mais poderosa. O sistema <strong>rc.d<\/strong> possui vari\u00e1veis de debug que, quando ativadas, produzem logs extremamente detalhados de cada etapa da inicializa\u00e7\u00e3o. Para ativar o debug globalmente, adicione ao <strong>\/etc\/rc.conf<\/strong>:<\/p>\n<pre><code>rc_debug=\"YES\"\nrc_info=\"YES\"<\/code><\/pre>\n<p>A vari\u00e1vel <strong>rc_debug<\/strong> habilita mensagens detalhadas de cada script rc.d executado, mostrando exatamente quais comandos est\u00e3o sendo invocados e com quais argumentos. J\u00e1 <strong>rc_info<\/strong> exibe informa\u00e7\u00f5es sobre a ordena\u00e7\u00e3o dos scripts, \u00fatil para depurar problemas de depend\u00eancia. Ap\u00f3s adicionar essas linhas, reinicie o sistema ou execute manualmente o <strong>\/etc\/rc<\/strong> com as vari\u00e1veis exportadas:<\/p>\n<pre><code>sh -x \/etc\/rc 2>&1 | tee \/tmp\/boot_debug.log<\/code><\/pre>\n<p>O <strong>-x<\/strong> ativa o tracing do shell, mostrando cada linha executada. Redirecionamos para um arquivo porque a sa\u00edda ser\u00e1 massiva \u2014 facilmente milhares de linhas. Procure no arquivo por mensagens de erro, por &#8220;failed&#8221; ou pelo nome do seu servi\u00e7o. Uma t\u00e9cnica eficaz que utilizamos na JRT Technology Solutions \u00e9 habilitar o debug apenas para um servi\u00e7o espec\u00edfico durante troubleshooting, modificando temporariamente seu script rc.d para incluir <strong>set -x<\/strong> ap\u00f3s o shebang.<\/p>\n<h3>Implementando health checks e verifica\u00e7\u00f5es de pr\u00e9-inicializa\u00e7\u00e3o<\/h3>\n<p>Um script rc.d bem escrito n\u00e3o apenas inicia um processo \u2014 ele verifica se as condi\u00e7\u00f5es necess\u00e1rias est\u00e3o satisfeitas antes mesmo de tentar. Vamos evoluir nosso script <strong>monitor_api<\/strong> adicionando verifica\u00e7\u00f5es de sanidade e um m\u00e9todo de status mais informativo.<\/p>\n<pre><code>#!\/bin\/sh\n\n# PROVIDE: monitor_api\n# REQUIRE: DAEMON NETWORKING\n# KEYWORD: shutdown\n\n. \/etc\/rc.subr\n\nname=\"monitor_api\"\nrcvar=\"monitor_api_enable\"\npidfile=\"\/var\/run\/${name}.pid\"\ncommand=\"\/usr\/sbin\/daemon\"\ncommand_args=\"-p ${pidfile} -o \/var\/log\/${name}.log \/usr\/local\/bin\/monitor-api.py\"\nrequired_files=\"\/usr\/local\/bin\/monitor-api.py\"\nexport MONITOR_PORT=8080\n\n# Health check customizado: verifica se a porta n\u00e3o est\u00e1 em uso\nmonitor_api_prestart()\n{\n    local port=${MONITOR_PORT:-8080}\n    \n    if sockstat -l4 -p $port | grep -q LISTEN; then\n        err 1 \"Porta $port j\u00e1 est\u00e1 em uso por outro processo\"\n    fi\n    \n    if [ ! -w \/var\/log\/ ]; then\n        warn \"Diret\u00f3rio \/var\/log\/ n\u00e3o \u00e9 grav\u00e1vel. Logs podem falhar.\"\n    fi\n    \n    return 0\n}\n\n# Status customizado: al\u00e9m de verificar PID, testa o endpoint de sa\u00fade\nmonitor_api_status()\n{\n    local pid=$(check_pidfile $pidfile $command)\n    \n    if [ -z \"$pid\" ]; then\n        echo \"$name n\u00e3o est\u00e1 rodando.\"\n        return 1\n    fi\n    \n    echo \"$name est\u00e1 rodando como pid $pid.\"\n    \n    if command -v curl > \/dev\/null 2>&1; then\n        if curl -sf http:\/\/127.0.0.1:${MONITOR_PORT:-8080}\/health > \/dev\/null 2>&1; then\n            echo \"Health check: OK\"\n        else\n            echo \"Health check: FALHOU (endpoint \/health n\u00e3o responde)\"\n            return 2\n        fi\n    fi\n    \n    return 0\n}\n\nload_rc_config $name\nrun_rc_command \"$1\"<\/code><\/pre>\n<p>As fun\u00e7\u00f5es <strong>monitor_api_prestart<\/strong> e <strong>monitor_api_status<\/strong> s\u00e3o automaticamente detectadas pelo <strong>rc.subr<\/strong> devido \u00e0 conven\u00e7\u00e3o de nomenclatura <strong>${name}_prestart<\/strong> e <strong>${name}_status<\/strong>. A fun\u00e7\u00e3o <strong>prestart<\/strong> \u00e9 executada antes do <strong>start<\/strong> e pode abortar a inicializa\u00e7\u00e3o retornando um c\u00f3digo diferente de zero \u2014 usamos a fun\u00e7\u00e3o utilit\u00e1ria <strong>err<\/strong> para isso, que exibe uma mensagem e sai com erro. O <strong>sockstat<\/strong> verifica se a porta j\u00e1 est\u00e1 ocupada, prevenindo falhas obscuras. A fun\u00e7\u00e3o <strong>status<\/strong> vai al\u00e9m da verifica\u00e7\u00e3o padr\u00e3o de PID: ela testa ativamente o endpoint de sa\u00fade, fornecendo uma confirma\u00e7\u00e3o de que o servi\u00e7o n\u00e3o apenas est\u00e1 rodando, mas est\u00e1 funcional.<\/p>\n<h3>Comparativo de comandos para gerenciamento de servi\u00e7os no FreeBSD<\/h3>\n<p>O FreeBSD oferece tr\u00eas interfaces principais para gerenciar servi\u00e7os, cada uma com seu prop\u00f3sito espec\u00edfico. Compreender quando usar cada uma \u00e9 essencial para uma administra\u00e7\u00e3o eficiente.<\/p>\n<table border=\"1\" cellpadding=\"8\" cellspacing=\"0\" style=\"width:100%; border-collapse: collapse;\">\n<thead>\n<tr style=\"background-color: #f2f2f2;\">\n<th>Comando<\/th>\n<th>Prop\u00f3sito<\/th>\n<th>Exemplo<\/th>\n<th>Quando usar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>service<\/strong><\/td>\n<td>Interface amig\u00e1vel para gerenciar servi\u00e7os rc.d<\/td>\n<td><strong>service nginx restart<\/strong><\/td>\n<td>Uso di\u00e1rio, administra\u00e7\u00e3o interativa e scripts de manuten\u00e7\u00e3o<\/td>\n<\/tr>\n<tr>\n<td><strong>\/etc\/rc.d\/&lt;script&gt;<\/strong> diretamente<\/td>\n<td>Acesso direto ao script de inicializa\u00e7\u00e3o<\/td>\n<td><strong>\/etc\/rc.d\/sshd status<\/strong><\/td>\n<td>Debugging, quando precisa ver o script espec\u00edfico sendo executado<\/td>\n<\/tr>\n<tr>\n<td><strong>sysrc<\/strong><\/td>\n<td>Gerenciamento seguro de vari\u00e1veis no \/etc\/rc.conf<\/td>\n<td><strong>sysrc nginx_enable=YES<\/strong><\/td>\n<td>Automa\u00e7\u00e3o, scripts de provisionamento, evitar duplicatas no rc.conf<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Palavras-chave rc.d e suas fun\u00e7\u00f5es \u2014 tabela de refer\u00eancia completa<\/h3>\n<p>As palavras-chave nos cabe\u00e7alhos dos scripts rc.d controlam a ordena\u00e7\u00e3o, o escopo de execu\u00e7\u00e3o e o comportamento durante shutdown. Dominar essas palavras-chave permite que voc\u00ea orquestre inicializa\u00e7\u00f5es complexas com confian\u00e7a.<\/p>\n<table border=\"1\" cellpadding=\"8\" cellspacing=\"0\" style=\"width:100%; border-collapse: collapse;\">\n<thead>\n<tr style=\"background-color: #f2f2f2;\">\n<th>Palavra-chave<\/th>\n<th>Fun\u00e7\u00e3o<\/th>\n<th>Exemplo<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>PROVIDE<\/strong><\/td>\n<td>Declara o nome do servi\u00e7o\/facilidade que este script prov\u00ea<\/td>\n<td><strong>PROVIDE: postgresql<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>REQUIRE<\/strong><\/td>\n<td>Lista servi\u00e7os que devem ser iniciados ANTES deste<\/td>\n<td><strong>REQUIRE: DAEMON NETWORKING<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>BEFORE<\/strong><\/td>\n<td>For\u00e7a que este script execute ANTES de outros listados<\/td>\n<td><strong>BEFORE: LOGIN<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>KEYWORD<\/strong><\/td>\n<td>Controla em quais fases do ciclo de vida o script \u00e9 executado<\/td>\n<td><strong>KEYWORD: shutdown<\/strong> (executa stop no desligamento) | <strong>KEYWORD: nojail<\/strong> (n\u00e3o executa em jails)<\/td>\n<\/tr>\n<tr>\n<td><strong>${name}_enable<\/strong><\/td>\n<td>Vari\u00e1vel booleana que controla se o servi\u00e7o inicia automaticamente<\/td>\n<td><strong>monitor_api_enable=&#8221;YES&#8221;<\/strong> no \/etc\/rc.conf<\/td>\n<\/tr>\n<tr>\n<td><strong>${name}_flags<\/strong><\/td>\n<td>Argumentos extras passados ao comando do servi\u00e7o<\/td>\n<td><strong>monitor_api_flags=&#8221;-t monitor&#8221;<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Erros comuns e como resolver<\/h3>\n<p>Ao trabalhar com <strong>rc.d e startup scripts<\/strong>, alguns erros aparecem com frequ\u00eancia, especialmente durante a cria\u00e7\u00e3o de scripts personalizados. Abaixo est\u00e3o os quatro problemas mais comuns que encontramos em nossos projetos na JRT Technology Solutions, junto com suas causas, sintomas e solu\u00e7\u00f5es completas.<\/p>\n<ul>\n<li><strong>Erro 1: &#8220;Cannot &#8216;start&#8217; &lt;servi\u00e7o&gt;. Set &lt;servi\u00e7o&gt;_enable to YES in \/etc\/rc.conf&#8221;<\/strong><br \/>\n        <br \/><strong>Causa:<\/strong> O servi\u00e7o n\u00e3o est\u00e1 habilitado. A a\u00e7\u00e3o <strong>start<\/strong> padr\u00e3o verifica a vari\u00e1vel <strong>${rcvar}<\/strong> (por exemplo, <strong>monitor_api_enable<\/strong>) e recusa iniciar se ela n\u00e3o estiver definida como &#8220;YES&#8221; no <strong>\/etc\/rc.conf<\/strong>.<br \/>\n        <br \/><strong>Sintoma:<\/strong> O comando <strong>service monitor_api start<\/strong> exibe a mensagem de erro acima e retorna c\u00f3digo 1.<br \/>\n        <br \/><strong>Solu\u00e7\u00e3o:<\/strong> Execute <strong>sysrc monitor_api_enable=&#8221;YES&#8221;<\/strong> para habilitar permanentemente, ou use <strong>service monitor_api onestart<\/strong> para iniciar sem verificar o enable (modo de teste). Verifique se a vari\u00e1vel est\u00e1 realmente definida com <strong>sysrc -a | grep monitor_api<\/strong>.\n    <\/li>\n<li><strong>Erro 2: &#8220;pidfile \/var\/run\/&lt;servi\u00e7o&gt;.pid does not exist&#8221; ap\u00f3s start bem-sucedido<\/strong><br \/>\n        <br \/><strong>Causa:<\/strong> O daemon n\u00e3o est\u00e1 criando o arquivo PID esperado. Isso \u00e9 comum quando voc\u00ea usa <strong>command=&#8221;seu_daemon&#8221;<\/strong> diretamente sem o wrapper <strong>\/usr\/sbin\/daemon<\/strong>, e o programa n\u00e3o implementa cria\u00e7\u00e3o de pidfile por conta pr\u00f3pria.<br \/>\n        <br \/><strong>Sintoma:<\/strong> O servi\u00e7o parece iniciar (sem mensagens de erro), mas o <strong>service status<\/strong> retorna &#8220;&lt;servi\u00e7o&gt; is not running&#8221; porque n\u00e3o encontra o pidfile.<br \/>\n        <br \/><strong>Solu\u00e7\u00e3o:<\/strong> Use <strong>\/usr\/sbin\/daemon -p \/var\/run\/&lt;servi\u00e7o&gt;.pid seu_comando<\/strong> no campo <strong>command<\/strong> e <strong>command_args<\/strong>. Alternativamente, implemente a cria\u00e7\u00e3o do pidfile no seu aplicativo ou sobrescreva a fun\u00e7\u00e3o <strong>start_cmd<\/strong> no script rc.d para utilizar <strong>echo $! > \/var\/run\/&lt;servi\u00e7o&gt;.pid<\/strong> ap\u00f3s iniciar o processo em background.\n    <\/li>\n<li><strong>Erro 3: &#8220;eval: &lt;vari\u00e1vel&gt;: not found&#8221; durante parsing do rc.conf<\/strong><br \/>\n        <br \/><strong>Causa:<\/strong> Erro de sintaxe no <strong>\/etc\/rc.conf<\/strong> \u2014 geralmente aspas desbalanceadas, caracteres especiais n\u00e3o escapados, ou uso de vari\u00e1veis de shell inv\u00e1lidas dentro do arquivo.<br \/>\n        <br \/><strong>Sintoma:<\/strong> Durante o boot ou ao carregar configura\u00e7\u00f5es com <strong>load_rc_config<\/strong>, o sistema emite erros de parsing e servi\u00e7os podem n\u00e3o iniciar.<br \/>\n        <br \/><strong>Solu\u00e7\u00e3o:<\/strong> Verifique a sintaxe do <strong>\/etc\/rc.conf<\/strong> com <strong>sh -n \/etc\/rc.conf<\/strong>. Procure por linhas com aspas n\u00e3o fechadas, espa\u00e7os ao redor do sinal de igual (deve ser <strong>variavel=&#8221;valor&#8221;<\/strong> sem espa\u00e7os), ou vari\u00e1veis com nome contendo h\u00edfens. Reverta altera\u00e7\u00f5es recentes ou edite com <strong>vi<\/strong> para corrigir. Em emerg\u00eancias, inicialize em single-user mode para editar o arquivo.\n    <\/li>\n<li><strong>Erro 4: Ordem de inicializa\u00e7\u00e3o incorreta \u2014 depend\u00eancias circulares ou servi\u00e7os que iniciam antes do necess\u00e1rio<\/strong><br \/>\n        <br \/><strong>Causa:<\/strong> Palavras-chave <strong>REQUIRE<\/strong> e <strong>BEFORE<\/strong> mal especificadas nos scripts rc.d. Um script declara <strong>REQUIRE: A<\/strong> e outro declara <strong>REQUIRE: B<\/strong>, mas A e B t\u00eam depend\u00eancias conflitantes que formam um ciclo.<br \/>\n        <br \/><strong>Sintoma:<\/strong> Durante o boot, voc\u00ea v\u00ea mensagens como &#8220;WARNING: circular dependency detected&#8221; ou servi\u00e7os falham porque suas depend\u00eancias ainda n\u00e3o est\u00e3o prontas.<br \/>\n        <br \/><strong>Solu\u00e7\u00e3o:<\/strong> Execute <strong>rcorder \/etc\/rc.d\/* \/usr\/local\/etc\/rc.d\/* 2>&#038;1 | head -50<\/strong> para ver a ordem calculada e identificar ciclos. Use <strong>rc_debug=&#8221;YES&#8221;<\/strong> no <strong>\/etc\/rc.conf<\/strong> para obter logs detalhados da ordena\u00e7\u00e3o. Simplifique as depend\u00eancias \u2014 se um servi\u00e7o s\u00f3 precisa de rede, use <strong>REQUIRE: NETWORKING<\/strong> em vez de listar servi\u00e7os de rede espec\u00edficos. Se necess\u00e1rio, use <strong>BEFORE<\/strong> com modera\u00e7\u00e3o para for\u00e7ar ordena\u00e7\u00e3o sem criar ciclos.\n    <\/li>\n<\/ul>\n<h3>Boas pr\u00e1ticas e dicas avan\u00e7adas para ambientes de produ\u00e7\u00e3o<\/h3>\n<p>Ap\u00f3s anos implementando infraestrutura FreeBSD para clientes de miss\u00e3o cr\u00edtica, consolidamos na JRT Technology Solutions um conjunto de pr\u00e1ticas que elevam a confiabilidade dos seus <strong>rc.d e startup scripts<\/strong> ao n\u00edvel enterprise. A primeira e mais importante: <strong>sempre use o wrapper \/usr\/sbin\/daemon<\/strong> para aplica\u00e7\u00f5es que n\u00e3o s\u00e3o daemons nativos. Ele fornece gerenciamento de pidfile, redirecionamento de logs, e reinicializa\u00e7\u00e3o autom\u00e1tica se configurado (via <strong>-r<\/strong>). A flag <strong>-r -R 5<\/strong>, por exemplo, reinicia o processo automaticamente at\u00e9 5 vezes se ele morrer, comprando tempo para investigar sem causar outage completa.<\/p>\n<p>Segundo, padronize o logging. Em vez de deixar cada aplica\u00e7\u00e3o escrever logs em locais arbitr\u00e1rios, configure todos os seus scripts rc.d para enviar sa\u00edda para <strong>\/var\/log\/&lt;servi\u00e7o&gt;.log<\/strong> usando o <strong>daemon -o<\/strong>, e integre com o <strong>newsyslog<\/strong> para rota\u00e7\u00e3o autom\u00e1tica. Adicione ao <strong>\/etc\/newsyslog.conf<\/strong> uma entrada para cada servi\u00e7o:<\/p>\n<pre><code># Formato: arquivo owner:group modo count size when flags\n\/var\/log\/monitor_api.log     root:wheel    640    5     100   *     J<\/code><\/pre>\n<p>Terceiro, implemente timeouts. O <strong>rc.subr<\/strong> possui mecanismos para evitar que servi\u00e7os travados bloqueiem o boot indefinidamente. Adicione ao seu <strong>\/etc\/rc.conf<\/strong>:<\/p>\n<pre><code>rcshutdown_timeout=\"30\"    # segundos de espera no shutdown\nrc_startmsgs=\"YES\"         # exibe mensagens durante o boot<\/code><\/pre>\n<p>Para servi\u00e7os individuais, voc\u00ea pode definir <strong>&lt;servi\u00e7o&gt;_timeout=&#8221;10&#8243;<\/strong> para limitar o tempo de espera durante start\/stop. Quarto, utilize jails para isolar servi\u00e7os e testar scripts rc.d em ambiente controlado. Uma jail permite que voc\u00ea reinicie servi\u00e7os, teste diferentes ordena\u00e7\u00f5es e simule falhas sem afetar o host. Em nossos laborat\u00f3rios de treinamento, cada aluno recebe uma jail dedicada para experimentar \u00e0 vontade.<\/p>\n<p>Por fim, automatize a valida\u00e7\u00e3o. Crie um script de p\u00f3s-deploy que executa <strong>service &lt;nome&gt; status<\/strong> para todos os servi\u00e7os habilitados, coleta os c\u00f3digos de retorno e alerta se algum n\u00e3o estiver rodando. Combine isso com <strong>curl<\/strong> para health checks HTTP e <strong>nc<\/strong> para verifica\u00e7\u00f5es de porta TCP. A confiabilidade vem da verifica\u00e7\u00e3o cont\u00ednua, n\u00e3o apenas da configura\u00e7\u00e3o inicial correta.<\/p>\n<h3>Integrando scripts rc.d com o ecossistema de jails do FreeBSD<\/h3>\n<p>Um dos recursos mais poderosos do FreeBSD \u00e9 o suporte nativo a jails, e os scripts <strong>rc.d<\/strong> s\u00e3o totalmente integrados a esse ecossistema. Quando voc\u00ea cria uma jail, o sistema de inicializa\u00e7\u00e3o trata cada jail como um ambiente isolado com seu pr\u00f3prio conjunto de scripts <strong>rc.d<\/strong> executando dentro dela. A palavra-chave <strong>KEYWORD: nojail<\/strong> em um script impede que ele seja executado dentro de jails \u2014 importante para servi\u00e7os que s\u00f3 fazem sentido no host, como configura\u00e7\u00e3o de interfaces de rede f\u00edsicas ou carregamento de m\u00f3dulos do kernel.<\/p>\n<p>Para servi\u00e7os que rodam em jails, o padr\u00e3o recomendado \u00e9 instalar o software dentro da jail e colocar o script rc.d correspondente em <strong>\/usr\/local\/etc\/rc.d\/<\/strong> dentro do sistema de arquivos da jail. O host n\u00e3o precisa conhecer esses servi\u00e7os \u2014 ele simplesmente inicia a jail, e o processo de boot da jail executa seus pr\u00f3prios scripts. Para gerenciar servi\u00e7os de dentro do host, use:<\/p>\n<pre><code>jexec &lt;nome_da_jail&gt; service &lt;servi\u00e7o&gt; status\njexec &lt;nome_da_jail&gt; sysrc &lt;servi\u00e7o&gt;_enable=YES<\/code><\/pre>\n<p>Esta abordagem mant\u00e9m a separa\u00e7\u00e3o de responsabilidades e permite que cada jail seja tratada como um servidor independente, facilitando migra\u00e7\u00f5es e backups. Em ambientes de alta disponibilidade que gerenciamos na JRT Technology Solutions, utilizamos jails com scripts rc.d customizados para servi\u00e7os stateless que podem ser movidos entre hosts com tempo de inatividade m\u00ednimo.<\/p>\n<h3>Resumo da Aula 14<\/h3>\n<p>Nesta aula intensiva, dissecamos o sistema <strong>rc.d<\/strong> do FreeBSD \u2014 o framework que governa como os servi\u00e7os nascem, vivem e morrem dentro do sistema operacional. Come\u00e7amos pela arquitetura fundamental, entendendo a diferen\u00e7a entre <strong>\/etc\/rc.d\/<\/strong> (sistema base) e <strong>\/usr\/local\/etc\/rc.d\/<\/strong> (aplica\u00e7\u00f5es de terceiros e scripts personalizados). Exploramos a anatomia de um script rc.d linha por linha, compreendendo o papel crucial do <strong>\/etc\/rc.subr<\/strong> e das palavras-chave <strong>PROVIDE<\/strong>, <strong>REQUIRE<\/strong>, <strong>BEFORE<\/strong> e <strong>KEYWORD<\/strong>.<\/p>\n<p>Na pr\u00e1tica, criamos um servi\u00e7o Python funcional e o envolvemos em um script rc.d completo, utilizando o utilit\u00e1rio <strong>daemon<\/strong> para gerenciamento de processos, implementando health checks com <strong>prestart<\/strong> e <strong>status<\/strong> customizados, e configurando o ambiente via <strong>\/etc\/rc.conf<\/strong> e <strong>\/etc\/rc.conf.d\/<\/strong>. Aprendemos a depurar problemas com <strong>rc_debug<\/strong> e <strong>sh -x<\/strong>, e examinamos os quatro erros mais comuns que administradores enfrentam \u2014 junto com suas solu\u00e7\u00f5es definitivas.<\/p>\n<p>Para ambientes de produ\u00e7\u00e3o, estabelecemos boas pr\u00e1ticas como uso consistente do <strong>daemon<\/strong>, integra\u00e7\u00e3o com <strong>newsyslog<\/strong> para rota\u00e7\u00e3o de logs, timeouts para evitar bloqueios no boot, e a sinergia entre <strong>rc.d<\/strong> e jails. O dom\u00ednio desses conceitos transforma voc\u00ea de um administrador que &#8220;aperta bot\u00f5es&#8221; para um engenheiro que projeta inicializa\u00e7\u00f5es resilientes e previs\u00edveis. Na pr\u00f3xima aula, mergulharemos no <strong>sistema de logging do FreeBSD<\/strong> \u2014 syslogd, newsyslog, e como centralizar logs de m\u00faltiplos servidores e jails para an\u00e1lise forense e monitoramento proativo.<\/p>\n<p>Continue praticando: modifique o script <strong>monitor_api<\/strong> para adicionar uma funcionalidade de reload (sinal <strong>SIGHUP<\/strong>), crie um segundo servi\u00e7o que dependa do primeiro usando <strong>REQUIRE: monitor_api<\/strong>, e teste o comportamento do sistema durante um reboot completo com ambos habilitados. A maestria vem da experimenta\u00e7\u00e3o deliberada, e cada minuto investido aqui retornar\u00e1 em confiabilidade e paz de esp\u00edrito quando seus servidores de produ\u00e7\u00e3o enfrentarem seu pr\u00f3ximo reboot inesperado.<\/p>\n<div style=\"margin:52px 0 40px;padding:36px 28px;background:linear-gradient(135deg,#0f172a 0%,#1a2744 100%);border:2px solid #25D366;border-radius:18px;text-align:center;box-shadow:0 4px 28px rgba(37,211,102,0.18)\">\n<p style=\"margin:0 0 10px;font-size:18px;color:#ffffff;font-weight:700;line-height:1.4\">Quer aprender na pr\u00e1tica com especialistas?<\/p>\n<p style=\"margin:0 0 28px;font-size:15px;color:#94a3b8;font-weight:400;line-height:1.6\">A JRT Technology Solutions oferece treinamentos e implementa\u00e7\u00e3o de FreeBSD para equipes corporativas.<\/p>\n<p>  <a href=\"https:\/\/api.whatsapp.com\/send\/?phone=5521980606699&#038;text=Ol%C3%A1!%20Tenho%20interesse%20no%20treinamento%20de%20FreeBSD.&#038;type=phone_number&#038;app_absent=0\"\n     target=\"_blank\" rel=\"noopener noreferrer\"\n     style=\"display:inline-flex;align-items:center;gap:12px;background:#25D366;color:#ffffff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:16px;font-weight:700;padding:15px 32px;border-radius:100px;text-decoration:none;box-shadow:0 4px 16px rgba(37,211,102,0.45);letter-spacing:0.01em\"><br \/>\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"#ffffff\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\"\/><\/svg><br \/>\n    Falar no WhatsApp<br \/>\n  <\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso &#8220;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&#8221;. Clique e descubra!<\/p>\n","protected":false},"author":1,"featured_media":1587,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"iawp_total_views":1,"footnotes":""},"categories":[63],"tags":[1080,2622,93,2621,2619,2620],"class_list":["post-1588","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-freebsd","tag-administracao-de-sistemas","tag-configuracao-de-servicos-freebsd","tag-freebsd","tag-gerenciamento-de-servicos-freebsd","tag-rc-d","tag-scripts-de-inicializacao"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;. Clique e descubra!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Thiago Paes Rodrigues\"\/>\n\t<meta name=\"google-site-verification\" content=\"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_BR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta property=\"og:description\" content=\"Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;. Clique e descubra!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"100\" \/>\n\t\t<meta property=\"og:image:height\" content=\"75\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-16T21:10:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-16T21:10:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61590814880509\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;. Clique e descubra!\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#blogposting\",\"name\":\"Aula 14: rc.d e startup scripts \\u2014 gerenciando servi\\u00e7os no FreeBSD - BLOG - JRT Technology Solutions\",\"headline\":\"Aula 14: rc.d e startup scripts \\u2014 gerenciando servi\\u00e7os no FreeBSD\",\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/ai-image-1784236222800.jpg\",\"width\":1440,\"height\":1024,\"caption\":\"Aula 14: rc.d e startup scripts \\u2014 gerenciando servi\\u00e7os no FreeBSD\"},\"datePublished\":\"2026-07-16T18:10:35-03:00\",\"dateModified\":\"2026-07-16T18:10:35-03:00\",\"inLanguage\":\"pt-BR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#webpage\"},\"articleSection\":\"FreeBSD, administra\\u00e7\\u00e3o de sistemas, configura\\u00e7\\u00e3o de servi\\u00e7os FreeBSD, FreeBSD, gerenciamento de servi\\u00e7os FreeBSD, rc.d, scripts de inicializa\\u00e7\\u00e3o\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"name\":\"FreeBSD\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"position\":2,\"name\":\"FreeBSD\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#listItem\",\"name\":\"Aula 14: rc.d e startup scripts \\u2014 gerenciando servi\\u00e7os no FreeBSD\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#listItem\",\"position\":3,\"name\":\"Aula 14: rc.d e startup scripts \\u2014 gerenciando servi\\u00e7os no FreeBSD\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"name\":\"FreeBSD\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"telephone\":\"+552138277513\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/cropped-logo-mini.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#organizationLogo\",\"width\":100,\"height\":75},\"image\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61590814880509\",\"https:\\\/\\\/www.instagram.com\\\/jrtx.tech\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/\",\"name\":\"Thiago Paes Rodrigues\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#authorImage\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/cropped-foto-rascunho3-96x96.jpeg\",\"width\":96,\"height\":96,\"caption\":\"Thiago Paes Rodrigues\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#webpage\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/\",\"name\":\"Aula 14: rc.d e startup scripts \\u2014 gerenciando servi\\u00e7os no FreeBSD - BLOG - JRT Technology Solutions\",\"description\":\"Aprenda a gerenciar servi\\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso \\\"FreeBSD \\u2014 Do Zero ao Avan\\u00e7ado\\\". Clique e descubra!\",\"inLanguage\":\"pt-BR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/ai-image-1784236222800.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#mainImage\",\"width\":1440,\"height\":1024,\"caption\":\"Aula 14: rc.d e startup scripts \\u2014 gerenciando servi\\u00e7os no FreeBSD\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/07\\\/16\\\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\\\/#mainImage\"},\"datePublished\":\"2026-07-16T18:10:35-03:00\",\"dateModified\":\"2026-07-16T18:10:35-03:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"alternateName\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"inLanguage\":\"pt-BR\",\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD - BLOG - JRT Technology Solutions","description":"Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso \"FreeBSD \u2014 Do Zero ao Avan\u00e7ado\". Clique e descubra!","canonical_url":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#blogposting","name":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD - BLOG - JRT Technology Solutions","headline":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD","author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/07\/ai-image-1784236222800.jpg","width":1440,"height":1024,"caption":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD"},"datePublished":"2026-07-16T18:10:35-03:00","dateModified":"2026-07-16T18:10:35-03:00","inLanguage":"pt-BR","mainEntityOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#webpage"},"isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#webpage"},"articleSection":"FreeBSD, administra\u00e7\u00e3o de sistemas, configura\u00e7\u00e3o de servi\u00e7os FreeBSD, FreeBSD, gerenciamento de servi\u00e7os FreeBSD, rc.d, scripts de inicializa\u00e7\u00e3o"},{"@type":"BreadcrumbList","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","position":1,"name":"Home","item":"https:\/\/jrtx.com.br\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","name":"FreeBSD"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","position":2,"name":"FreeBSD","item":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#listItem","name":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD"},"previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#listItem","position":3,"name":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD","previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","name":"FreeBSD"}}]},{"@type":"Organization","@id":"https:\/\/jrtx.com.br\/blog\/#organization","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","url":"https:\/\/jrtx.com.br\/blog\/","telephone":"+552138277513","logo":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#organizationLogo","width":100,"height":75},"image":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61590814880509","https:\/\/www.instagram.com\/jrtx.tech\/"]},{"@type":"Person","@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author","url":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/","name":"Thiago Paes Rodrigues","image":{"@type":"ImageObject","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#authorImage","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/09\/cropped-foto-rascunho3-96x96.jpeg","width":96,"height":96,"caption":"Thiago Paes Rodrigues"}},{"@type":"WebPage","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#webpage","url":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/","name":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD - BLOG - JRT Technology Solutions","description":"Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso \"FreeBSD \u2014 Do Zero ao Avan\u00e7ado\". Clique e descubra!","inLanguage":"pt-BR","isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#breadcrumblist"},"author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"creator":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/07\/ai-image-1784236222800.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#mainImage","width":1440,"height":1024,"caption":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD"},"primaryImageOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/#mainImage"},"datePublished":"2026-07-16T18:10:35-03:00","dateModified":"2026-07-16T18:10:35-03:00"},{"@type":"WebSite","@id":"https:\/\/jrtx.com.br\/blog\/#website","url":"https:\/\/jrtx.com.br\/blog\/","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","alternateName":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","inLanguage":"pt-BR","publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"}}]},"og:locale":"pt_BR","og:site_name":"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","og:type":"article","og:title":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD - BLOG - JRT Technology Solutions","og:description":"Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;. Clique e descubra!","og:url":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/","og:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:secure_url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:width":100,"og:image:height":75,"article:published_time":"2026-07-16T21:10:35+00:00","article:modified_time":"2026-07-16T21:10:35+00:00","article:publisher":"https:\/\/www.facebook.com\/profile.php?id=61590814880509","twitter:card":"summary_large_image","twitter:title":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD - BLOG - JRT Technology Solutions","twitter:description":"Aprenda a gerenciar servi\u00e7os no FreeBSD com rc.d e startup scripts na Aula 14 do nosso curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;. Clique e descubra!","twitter:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg"},"aioseo_meta_data":{"post_id":"1588","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-07-30 22:53:29","updated":"2026-07-30 22:53:29","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/\" title=\"FreeBSD\">FreeBSD<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tAula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/jrtx.com.br\/blog"},{"label":"FreeBSD","link":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/"},{"label":"Aula 14: rc.d e startup scripts \u2014 gerenciando servi\u00e7os no FreeBSD","link":"https:\/\/jrtx.com.br\/blog\/2026\/07\/16\/aula-14-rcd-e-startup-scripts-gerenciando-servicos-no-freebs\/"}],"_links":{"self":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/1588","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1588"}],"version-history":[{"count":0,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/1588\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media\/1587"}],"wp:attachment":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}