manuais-e-documentacao-itguys/documentacao linux/Nivel_3/[Nível 3] Scripting e Autom...

132 lines
3.7 KiB
Markdown

# 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?