5 cron jobs estranhos, mas úteis pelos quais eu juro

por Nada Em Troca
7 minutos de leitura
5 cron jobs estranhos, mas úteis pelos quais eu juro

Os cron jobs geralmente são considerados uma automação enfadonha para backups, rotação de logs e limpeza. Acredito firmemente que isso é inferior ao que eles são capazes, pois com um pouco de criatividade, o cron pode facilmente se tornar uma das partes mais pessoais e surpreendentemente divertidas do seu sistema. Eles são estranhos, práticos e geeks o suficiente para fazer seu homelab e seu fluxo de trabalho diário parecerem vivos em vez de invisíveis.

Rastreador de erros de digitação de comando

Não importa o quão geek você seja, todo mundo digita comandos errados, e tudo bem (nem sempre, mas você entende). O verdadeiro problema é que esquecemos esses erros de digitação e continuamos repetindo-os. Para resolver esse problema, esse cron job monitora seu histórico de shell, rastreia comandos com falha e cria um salão pessoal da vergonha que você pode revisar uma vez por semana.

Depois de alguns dias, você começará a notar certos padrões. Talvez você troque sinalizadores constantemente, digite caminhos longos incorretamente ou esqueça qual ferramenta pretendia usar. Depois de ver esses erros anotados e incluídos na lista do corredor da vergonha, você pode voltar e revisá-los ou usar apelidos simples (sim, isso é preguiçoso!)

A maneira como isso funciona é que o bash expõe o último comando e seu código de saída. Então, tudo o que precisamos fazer é nos conectar ao shell e registrar as falhas.

Crie um script chamado “log_failed_commands.sh”:

#!/usr/bin/env bash  LOG="$HOME/command_typos.log"  __prompt_command() {    local status=$?    local cmd="$BASH_COMMAND"     if [[ $status -ne 0 && ! $cmd =~ ^(cd|exit|source|.|[|[[) ]]; then        echo "$(date '+%F %T') | $cmd ($status)" >> "$LOG"    fi }  PROMPT_COMMAND="__prompt_command" 

Obtenha-o uma vez de .bashrc:

source “$HOME/log_failed_commands.sh” 

Você também pode verificar o log manualmente:

log do script de erros de digitação de comando

Agora crie um cron job semanal para enviar um e-mail ao salão da vergonha:

0 9 * * 1 mail -s "Hall of Shame: Command Typo Report" you@example.com < ~/.command_typos.log 

Monitor de rede (que fala com você)

Você provavelmente já está monitorando sua rede visualmente com dashboards e gráficos, e isso é legal, mas esse cron job vai na direção oposta e torna sua rede audível. Cada vez que um novo dispositivo aparece, seu sistema o anuncia em voz alta usando conversão de texto em voz.

Parece estranho até a primeira vez que um dispositivo desconhecido entra na sua rede e seu computador o chama casualmente do outro lado da sala. O script verifica a sub-rede local, compara os resultados com a execução anterior e fala quando detecta um novo IP. Estou usando ip neigh para simplificar, mas você pode modificá-lo e usar arp ou até mesmo nmap.

Crie "network_watch.sh":

#!/usr/bin/env bash  STATE="$HOME/.net_known" SEEN="$HOME/.net_seen" LOG="$HOME/network_monitor.log" TTS="/usr/bin/espeak"  command -v ip >/dev/null || exit 1 command -v espeak >/dev/null || TTS=""  ip neigh show | awk '{print $1, $5}' | sort > "$SEEN"  if [ ! -f "$STATE" ]; then    cp "$SEEN" "$STATE"    exit 0 fi  NEW=$(comm -13 "$STATE" "$SEEN")  for LINE in $NEW; do       IP=$(echo "$LINE" | awk '{print $1}')    MAC=$(echo "$LINE" | awk '{print $2}')       echo "$(date) New device detected: IP=$IP, MAC=$MAC" >> "$LOG"       if [ -n "$TTS" ]; then              espeak "New device detected" >/dev/null 2>&1    fi done  mv "$SEEN" "$STATE" 

Adicione uma entrada cron para ser executada a cada trinta minutos:

*/30 * * * * $HOME/network_watch.sh

Homelab Ping Pong

Se o seu homelab tem muitos contêineres como o meu, você sabe que a latência é importante e muito importante. Esse cron job faz ping em todos os contêineres em execução, registra seus tempos de resposta e cria uma lista classificada com base na velocidade, o que ajuda a detectar problemas dias antes de algo realmente falhar.

Esse pingue-pongue específico funciona porque o Docker expõe IPs de contêineres, então tudo que você precisa fazer é executar ping em cada contêiner uma vez e registrar o resultado.

Crie "container_latency.sh":

#!/usr/bin/env bash  OUT="$HOME/container_latency.log" LOCK="$HOME/.container_latency.lock"  exec 9>"$LOCK" || exit 1 flock -n 9 || exit 0  echo "Run $(date)" > "$OUT"  docker ps --format '{{.ID}}' | while read -r ID; do    IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$ID")    [ -z "$IP" ] && continue     AVG=$(ping -c 5 -q "$IP" 2>/dev/null | awk -F'/' 'END{print $5}')    [ -n "$AVG" ] && echo "$IP $AVG" >> "$OUT" done  sort -k2 -n "$OUT" -o "$OUT" 

Em seguida, agende a cada hora:

0 * * * * $HOME/container_latency.sh

Seu log ficaria mais ou menos assim:

log do cron job de pingue-pongue que verifica a latência do contêiner

Backups autoconscientes

Backups que nunca são testados são apenas backups teóricos, e a maioria de nós aprendeu essa lição da maneira mais difícil. Este cron job (ao contrário de nós) não assume nada e verifica tudo restaurando uma pequena amostra após cada execução.

Em vez de confiar facilmente nos registros que dizem “concluído com sucesso”, obtemos provas de que nossos dados podem realmente ser lidos e restaurados.

Crie "verify_backup.sh":

#!/usr/bin/env bash  BACKUP="$HOME/backups/latest.tar.gz" LOG="$HOME/backup_verify.log" TMP=$(mktemp -d)  [ -f "$BACKUP" ] || { echo "$(date) Backup missing" >> "$LOG"; exit 1; }  tar -tzf "$BACKUP" >/dev/null || { echo "$(date) Corrupt archive" >> "$LOG"; exit 1; }  FILES=$(tar -tzf "$BACKUP" | shuf -n 10)  for F in $FILES; do    tar -xzf "$BACKUP" "$F" -C "$TMP" || {        echo "$(date) Restore failed for $F" >> "$LOG"        rm -rf "$TMP"        exit 1    } done  echo "$(date) Backup '$BACKUP' successfully verified." >> "$LOG"  rm -rf "$TMP" 

Execute-o logo após sua tarefa de backup:

30 2 * * * $HOME/verify_backup.sh

Aqui está meu registro de backup:

log do script do verificador de backup

Lembrete de sequência do GitHub

Manter a consistência é mais difícil do que a produtividade, e é por isso que existe esse cron job, para proteger o impulso. Ele verifica sua atividade no GitHub e lembra se você está prestes a perder a sequência do dia.

Ele usa a API GitHub, que expõe eventos recentes e verifica commits diários e notifica se nenhum for encontrado.

Criar "github_streak.sh":

#!/usr/bin/env bash  USER="Your Username" TOKEN_FILE="$HOME/.github_token" LOG="$HOME/github_streak.log" LOCK="$HOME/.github_streak.lock"  exec 9>"$LOCK" || exit 1 flock -n 9 || exit 0  TODAY=$(date -u '+%Y-%m-%d')  AUTH_HEADER="" if [ -f "$TOKEN_FILE" ]; then    AUTH_HEADER="-H Authorization: token $(cat "$TOKEN_FILE")" fi  RESP=$(curl -s $AUTH_HEADER  "https://api.github.com/users/$USER/events/public")  [ -z "$RESP" ] && exit 0  if echo "$RESP" | grep -q ""created_at": "$TODAY"; then    exit 0 fi  echo "$(date) No GitHub activity detected for today" >> "$LOG" 

Agende para o final da tarde:

0 16 * * * $HOME/github_streak.sh

Esta é a aparência da minha atividade. Normalmente não relaxo, foi a temporada de férias que encerrou minha seqüência:

log do notificador de sequência do github

A maioria das tarefas que mencionei não são necessidades absolutas, mas cada uma é útil no sentido de que removem o atrito ou acrescentam consciência, ao mesmo tempo que são divertidas. Depois de começar a pensar no cron como uma ferramenta criativa, você encontrará centenas dessas pequenas tarefas que valem a pena automatizar, resultando em um sistema que parece atento e vivo.

Este artigo foi útil?
Gostei0Não Gostei0

Deixe um comentário

Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?
-
00:00
00:00
Update Required Flash plugin
-
00:00
00:00