# MANUAL TÉCNICO - SCRIPTING E AUTOMAÇÃO AVANÇADA **Código:** ITGENG 0012/26 | **Classificação:** CONFIDENCIAL **Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} ## 1. HISTÓRICO DE REVISÃO | Data | Versão | Descrição | Autor | | :--- | :--- | :--- | :--- | | {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | ## 2. OBJETIVO Padronizar a criação de scripts Shell (Bash), agendamento de tarefas (Cron), automação de relatórios (AWK) e notificações por e-mail para otimizar a administração de servidores. ## 3. PRÉ-REQUISITOS * [ ] Conhecimento de lógica de programação básica. * [ ] Servidor SMTP (Exchange Interno ou O365) disponível para relay. --- ## 4. SHELL SCRIPTING BÁSICO Todo script na iT Guys deve seguir este cabeçalho: ```bash #!/bin/bash # ------------------------------------------------------------------------- # Script: backup_diario.sh # Descricao: Realiza backup e envia logs. # Autor: João Pedro Toledo Gonçalves # Data: {{DATA_ATUAL}} # ------------------------------------------------------------------------- # Variaveis DESTINO="/mnt/backup" LOG="/var/log/meu_backup.log" # Funcao de Log com Data log_msg() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG" } # Execucao log_msg "Inicio do Backup" tar -czf "$DESTINO/backup.tar.gz" /etc/ if [ $? -eq 0 ]; then log_msg "Sucesso" else log_msg "Erro no Backup" fi ``` > ⚠️ **NOTA ALPINE:** O Alpine não traz o `bash` por padrão, apenas o `ash` (BusyBox). > * **Opção A:** Mude a primeira linha para `#!/bin/sh` (Compatível). > * **Opção B:** Instale o Bash: `apk add bash`. > ⚡ **DICA:** Execute com `bash -x script.sh` para debugar linha a linha. ## 5. AGENDAMENTO (CRON) Use o agendador nativo para rodar scripts automaticamente. 1. Edite a tabela do usuário: `crontab -e` 2. Sintaxe: `m h dom mon dow command` 3. Exemplos Úteis: ```bash # Rodar todo dia as 03:00 da manha 00 03 * * * /home/scripts/backup_diario.sh # Rodar a cada 1 hora 00 * * * * /usr/bin/php /var/www/html/cron.php # Rodar todo dia 1 do mes 00 05 1 * * /home/scripts/relatorio_mensal.sh ``` ## 6. NOTIFICAÇÕES POR E-MAIL (SMTP) Para scripts enviarem alertas, configure um cliente SMTP simples como o `msmtp` ou `postfix` (relay). **Exemplo de Envio em Script (usando `mail` ou `sendmail`):** ```bash ASSUNTO="Alerta: Disco Cheio no Servidor $(hostname)" EMAIL="monitoramento@itguys.com.br" CORPO="O servidor esta com 95% de disco ocupado. Verifique." echo "$CORPO" | mail -s "$ASSUNTO" -r "noreply@itguys.com.br" "$EMAIL" ``` **Configuração SMTP (Exemplo genérico `/etc/postfix/main.cf`):** ```config relayhost = [smtp.office365.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_tls_security_level = encrypt ``` ## 7. RELATÓRIOS CUSTOMIZADOS (AWK) O `awk` é perfeito para extrair colunas de logs. **Exemplo: Listar os 5 IPs que mais acessaram o Nginx** ```bash # Log format: IP - - [Data] "GET..." awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -5 ``` * `print $1`: Pega a primeira coluna (IP). * `sort | uniq -c`: Conta ocorrências. * `head -5`: Pega o top 5. ## 8. MICRO APPS (ALIASES) Crie atalhos para comandos longos no `~/.bashrc`: ```bash # Atualizar tudo com 1 palavra alias updatedb='sudo apt update && sudo apt upgrade -y' # Ver logs coloridos do nginx alias logweb='tail -f /var/log/nginx/error.log | ccze' # Limpar cache de memoria alias dropcache='sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' ``` *Aplique com `source ~/.bashrc`.* ## 9. VALIDAÇÃO FINAL - [ ] O script roda manualmente sem erros? - [ ] O Cronjob apareceu no log (`grep CRON /var/log/syslog`)? - [ ] O e-mail de teste chegou na caixa de correio?