0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

やれてる感をだす!さくらVPSをiPhoneショートカットで再起動

0
Last updated at Posted at 2026-02-02

【iPhone対応】さくらVPSをワンコマンドで自動復旧

Mac / iPhone(a-Shell + ショートカット)から実行する方法

はじめに

さくらVPSを運用していると、

  • サーバーが固まった
  • SSHは入れるけどサービスが落ちている
  • 外出先で再起動したい

====
私の場合はGitbucketを置いているふるーいサーバーがあってそこが落ちることがあるため
その都度再起動してましたがスマホでワンタップでできれば楽ちんだなとやってみました。

本記事では、

  • VPS上の shell script で再起動処理
  • 処理結果を Slack に通知
  • Mac からはエイリアスで実行
  • iPhone からは a-Shell + ショートカットで実行

という構成をまとめます。

👉 結果として
「Mac / iPhone どちらからでもワンタップでVPS復旧」
ができるようになります。


構成イメージ

[ Mac / iPhone ]
        |
        | SSH(鍵認証)
        v
[ さくらVPS ]
   ├─ 再起動・復旧用 shell script
   └─ Slack 通知

1. VPS上に自動復旧用 shell script を作成

まず、VPS上に再起動処理を行うスクリプトを作成します。

例:web-restart.sh

#!/bin/bash

SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXX/XXX/XXX"

usage() {
  echo "使用方法: $(basename "$0") {restart|status}"
  exit 0
}

cmd="${1:-}"
[ -z "$cmd" ] && usage

# root判定
if [ "${EUID:-$(id -u)}" -ne 0 ]; then
  is_root=0
else
  is_root=1
fi

service_cmd="/sbin/service"

# Slack送信
send_slack() {
  local text="$1"
  curl -s -X POST -H 'Content-type: application/json' \
    --data "{\"text\":\"$text\"}" \
    "$SLACK_WEBHOOK_URL" >/dev/null
}

# ポート確認(失敗しても落とさない)
show_port() {
  local port="$1"
  if command -v ss >/dev/null 2>&1; then
    ss -ltnp 2>/dev/null | awk -v p=":${port}" '$4 ~ p'
  elif command -v netstat >/dev/null 2>&1; then
    netstat -ltnp 2>/dev/null | awk -v p=":${port}" '$4 ~ p'
  fi
}

case "$cmd" in
  restart)
    echo "♻️ restart requested"

    RESULT_OK=1
    DETAILS="♻️ restart requested\n"

    if [ $is_root -eq 0 ]; then
      echo "⚠️ root権限なし(再起動は失敗する想定)"
      DETAILS+="⚠️ root権限なし\n"
      RESULT_OK=0
    fi

    echo "▶ httpd restart"
    if $service_cmd httpd restart >/dev/null 2>&1; then
      DETAILS+="✅ httpd restart OK\n"
    else
      echo "⚠️ httpd の再起動に失敗しました"
      DETAILS+="❌ httpd restart FAILED\n"
      RESULT_OK=0
    fi

    echo "🔎 httpd (port 8090)"
    show_port 8090 || true

    echo "▶ nginx config test"
    if command -v nginx >/dev/null 2>&1; then
      if nginx -t >/dev/null 2>&1; then
        DETAILS+="✅ nginx config OK\n"
      else
        echo "⚠️ nginx 設定チェック失敗"
        DETAILS+="❌ nginx config FAILED\n"
        RESULT_OK=0
      fi
    fi

    echo "▶ nginx restart"
    if $service_cmd nginx restart >/dev/null 2>&1; then
      DETAILS+="✅ nginx restart OK\n"
    else
      echo "⚠️ nginx の再起動に失敗しました"
      DETAILS+="❌ nginx restart FAILED\n"
      RESULT_OK=0
    fi

    # Slack通知
    if [ $RESULT_OK -eq 1 ]; then
      send_slack "🟢 *Web再起動 成功*\n${DETAILS}"
    else
      send_slack "🔴 *Web再起動 失敗*\n${DETAILS}"
    fi

    echo "✅ 完了"
    exit 0
    ;;

  status)
    echo "📊 サービス状態確認"

    DETAILS="📊 サービス状態\n"

    if $service_cmd httpd status >/dev/null 2>&1; then
      DETAILS+="✅ httpd: OK\n"
    else
      echo "httpd: 利用不可または権限不足"
      DETAILS+="⚠️ httpd: NG\n"
    fi

    if $service_cmd nginx status >/dev/null 2>&1; then
      DETAILS+="✅ nginx: OK\n"
    else
      echo "nginx: 利用不可または権限不足"
      DETAILS+="⚠️ nginx: NG\n"
    fi

    echo "🔎 ポート8090"
    if show_port 8090 >/dev/null 2>&1; then
      DETAILS+="✅ port 8090 open\n"
    else
      DETAILS+="⚠️ port 8090 closed\n"
    fi

    send_slack "$DETAILS"

    echo "✅ 完了"
    exit 0
    ;;

  *)
    usage
    ;;
esac

実行権限を付与

chmod +x web-restart.sh

2. Macからエイリアスで実行する

Macでは ssh コマンドをエイリアス化 すると一瞬で実行できます。

SSH鍵認証

VPS_HOST=xxxxx.xxx.sakura.ne.jp
VPS_PORT="xxxxxx"
VPS_USER=user_name
SSH_KEY="$HOME/.ssh/id_rsa.xxxxx"

REMOTE_SCRIPT=/home/user_name/bin/web-restart.sh


# ==========================
# 実行
# ==========================
echo "🔐 SSH接続中: ${VPS_USER}@${VPS_HOST}:${VPS_PORT}"

ssh \
  -i "${SSH_KEY}" \
  -p "${VPS_PORT}" \
  -o IdentitiesOnly=yes \
  -o BatchMode=yes \
  -o ConnectTimeout=10 \
  -o HostKeyAlgorithms=+ssh-rsa \
  -o PubkeyAcceptedAlgorithms=+ssh-rsa \
  "${VPS_USER}@${VPS_HOST}" \
  "sudo ${REMOTE_SCRIPT} restart"

echo "✅ VPS Webサービス再起動要求 完了"

がパスワードなしで通る状態にしておきます。

エイリアス設定(.bash

# さくらVPSスクリプト
alias sakurareboot='sh ~/xxxxxx/local-script-execution.sh'

反映:

source ~/.bash_profile

実行

sakurareboot

👉 Slack に通知が飛べば成功です 🎉


3. iPhone で a-Shell を使って実行する

a-Shell とは

  • iOS上で動く本格的なターミナルアプリ
  • SSH / shell script 実行が可能
  • Filesアプリとは別の独立したDocuments領域を持つ

4. iPhone内に SSH 実行用 script を配置

a-Shell 上で以下の構成にします。

Documents/
└─ scripts/
   └─ mobile-script-execution.sh

mobile-script-execution.sh

#!/bin/sh
VPS_HOST=xxxxx.xxx.sakura.ne.jp
VPS_PORT="xxxxxx"
VPS_USER=user_name
SSH_KEY="~/Documents/.ssh/id_rsa.xxxxx"

REMOTE_SCRIPT=/home/user_name/bin/web-restart.sh

# ==========================
# 実行ファイル
# ==========================

echo "🔐 SSH接続中: ${VPS_USER}@${VPS_HOST}:${VPS_PORT}"

ssh \
 -i "${SSH_KEY}" \
 -p "${VPS_PORT}" \
 -o IdentitiesOnly=yes \
 -o BatchMode=yes \
 -o ConnectTimeout=10 \
 -o HostKeyAlgorithms=+ssh-rsa \
 -o PubkeyAcceptedAlgorithms=+ssh-rsa \
 "${VPS_USER}@${VPS_HOST}" \
 "sudo ${REMOTE_SCRIPT} restart"

echo "✅ VPS Webサービス再起動要求 完了"

.sshに配置した認証キーですがa-shellの使い方がよくわからず
コピーしてtouchでファイルを作成して貼り付けました。
これが原因で余計なスペースが入りエラーですすめず・・・
⚠️ 改行や余計なスペースが入らないよう注意

実行権限

chmod +x ~/Documents/scripts/mobile-script-execution.sh

5. ショートカットアプリから a-Shell を実行する

ここも結構なハマりポイントでした。
いろんな記事などでpickFolderなどというコマンドが存在してそれを実行し共有スペースと繋げるどうこうと説明してもらっていたのですがまずコマンドが存在していないしスマホのディレクトリがよくわからなくてやられました。

ポイント

  • iOSショートカットの「a-Shell」アクションは
    a-Shell内のDocumentsを基準にコマンドを実行する
  • Filesアプリの「書類」とは直結していない

ショートカットの設定手順

  1. ショートカットアプリを開く
  2. 新規ショートカット作成
  3. アクション追加
  4. 「a-Shell」→「コマンドを実行」
  5. シェルコマンドに以下を指定
sh ~/Documents/scripts/mobile-script-execution.sh
  1. 保存

6. 実行結果

  • iPhoneのショートカットをタップ
  • a-Shell が起動
  • SSH 経由で VPS の script 実行
  • サービス再起動
  • Slack に結果通知 🎉

外出先でも完全復旧可能になりました。


ハマったポイントまとめ

  • $HOME が展開されない環境がある
    ~ を使うと解決
  • SSH鍵に余計なスペースや改行が入ると invalid format
  • a-Shell の Documents は Filesアプリとは別物
  • pickFolder は使えないケースがある(環境依存)

おわりに

  • VPS運用は「復旧スピード」が命
  • iPhoneからでも即対応できる環境は精神安定剤になる
  • a-Shell + ショートカットは想像以上に強力

ちなみにさくらVPSのサーバー監視で直接再起動することもできるんですがそれではやれてる感がでないため
わざわざslackでサーバーアラート通知を受け取りiPhoneショートカットで再起動します。

同じように
「サーバーをスマホから制御したい人」
の参考になれば幸いです。


もちろんchatGPT先生が作ってくれました。
chatGPTを介して作業をすすめたのでそれをまとめてとお願いしました。
実際にできあがったものとそこそこ違いますが・・許容範囲だと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?