132 lines
3.7 KiB
Markdown
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?
|