Shell notifications

Уведомления на телефон из bash и curl-like скриптов.

Nerve CLI принимает stdin, поэтому его легко добавить в deploy.sh, backup.sh, smoke test или ручной one-liner.

One-liner

Скопируйте блок под сервер. Он поставит Go, если его нет, затем установит CLI через go install.

# Linux x86_64 / ARM64
command -v go >/dev/null || {
  GO_VERSION="$(curl -fsSL 'https://go.dev/VERSION?m=text' | head -n 1)"
  case "$(uname -m)" in
    x86_64|amd64) GO_ARCH="amd64" ;;
    aarch64|arm64) GO_ARCH="arm64" ;;
    *) echo "Unsupported architecture: $(uname -m)"; exit 1 ;;
  esac
  curl -fsSLO "https://go.dev/dl/${GO_VERSION}.linux-${GO_ARCH}.tar.gz"
  sudo rm -rf /usr/local/go
  sudo tar -C /usr/local -xzf "${GO_VERSION}.linux-${GO_ARCH}.tar.gz"
  export PATH="/usr/local/go/bin:$PATH"
}
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
export PATH="$PATH:$(go env GOPATH)/bin"
export NERVE_DSN="nerve://TOKEN:[email protected]"
echo "smoke failed on api-prod" | nerve send --severity alert

С exit status

if ./smoke.sh; then
  echo "smoke passed: api-prod" | nerve send
else
  echo "smoke failed: api-prod" | nerve send --severity critical
fi

Почему не сырой curl webhook

Сырой webhook обычно отправляет plaintext на сервер. Nerve CLI шифрует payload локально sender key, а backend получает уже ciphertext.

Передать последние строки ошибки

Для реального runbook-а одной фразы “упало” мало. Сохраните вывод команды и отправьте короткий хвост.

LOG="/tmp/deploy.log"
if ! ./deploy.sh >"$LOG" 2>&1; then
  {
    echo "deploy failed on $(hostname)"
    tail -20 "$LOG"
  } | nerve send --severity critical
fi

JSON через jq

Если источник уже отдает JSON, не отправляйте весь payload. Вытащите только поля, которые нужны на телефоне.

curl -s https://api.example.com/status \
  | jq -r '"status=\(.status) service=\(.service) message=\(.message)"' \
  | nerve send --severity alert

Проверка установки

Если команда не находится из cron, добавьте $(go env GOPATH)/bin в PATH или используйте полный путь до бинарника nerve.