投稿者: manualmaton Page 19 of 263

Webサーバに複数のWebサイトを運用する際の確認・Apache再起動スクリプト。

Webサーバ1つに複数のサイトを運用している場合、

「バーチャルホストでどんなWebサービスが動いているか?」「設定変更後の構文は正しいか?」「Webサービス再起動後、ステータスは正常か?」

を確認したい場合は多々あります。

それを解決するためのスクリプトがこちらです。

環境

  • Ubuntu 24.04
  • Apache 2.4
  • バーチャルホストはデフォルトの/etc/apache2/site-enabledを踏襲

スクリプト内容

  • apache2-check.sh
#!/bin/bash

# サイト設定ディレクトリ
SITES_DIR="/etc/apache2/sites-enabled"

# スクリプトを root ユーザーで実行しているかチェック
if [ "$EUID" -ne 0 ]; then
    echo "このスクリプトは root 権限で実行する必要があります。"
    exit 1
fi

# 1. /etc/apache2/sites-enabled 配下のファイルとURL表示
echo "==== 有効なサイト設定ファイル ===="
if [ -z "$(ls -A "$SITES_DIR")" ]; then
    echo "サイト設定が存在しません。"
else
    for site in "$SITES_DIR"/*; do
        echo "設定ファイル: $(basename "$site")"

        # ServerNameとServerAliasを正規化して抽出
        entries=$(grep -hi -E "ServerName|ServerAlias" "$site" | sed -E 's/^[[:blank:]]+//;s/[[:blank:]]*#.*//' | awk '{
            original_directive = $1
            directive = tolower(original_directive)
            proper_directive = (directive == "servername") ? "ServerName" : 
                              (directive == "serveralias") ? "ServerAlias" : original_directive

            for (i=2; i<=NF; i++) {
                domain = tolower($i)
                sub(/[;,]*$/, "", domain)
                gsub(/^[[:blank:]]+|[[:blank:]]+$/, "", domain)
                if (domain) {
                    printf "%s %s\n", proper_directive, domain
                }
            }
        }' | sort -u)

        if [ -z "$entries" ]; then
            echo "  ※ ServerName/ServerAliasが定義されていません"
        else
            echo "$entries" | sed 's/^/  /'
        fi
        echo
    done
fi

echo "=================================="

# 2. Apache構文チェック
echo "構文チェック中..."
if ! apachectl configtest; then
    echo "構文エラーが検出されました。Apacheを再起動できません。"
    exit 1
fi
echo "構文チェック完了: 問題ありません。"

# 3. Apache再起動の確認
read -p "Apacheを再起動しますか? (y/n): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
    echo "Apacheを再起動します..."
    if ! systemctl restart apache2; then
        echo "Apacheの再起動に失敗しました。"
        exit 1
    fi
    echo "Apacheが正常に再起動されました。"

    # 4. Apacheステータス確認
    echo "==== Apacheステータス ===="
    systemctl status apache2 --no-pager
else
    echo "Apacheの再起動はキャンセルされました。"

保存後、

sudo chmod +x apache2-check.sh

として、

sudo bash apache2-check.sh

を実行することで、

  • /etc/apache2/site-enabled/ 配下のコンフィグからWebサイト名を表示
  • 設定ファイルの構文を確認
  • Webサービス再起動の確認
  • Webサービス再起動後のステータスの表示

を一括で行うことができます。

使った後

このスクリプトを使うことで、Apacheの設定確認と再起動作業が大幅に効率化されました。

  • 設定ファイルの一覧表示: どのサイトが有効になっているか一目で確認できるため、サイト管理がしやすくなりました。
  • ServerName/ServerAliasの抽出: 各サイトの設定内容を簡単に確認できるため、設定ミスを防ぐのに役立ちました。
  • 構文チェック: 設定変更後の構文エラーチェックを確実に行えるため、Webサイトの停止時間を減らすことができました。
  • 再起動手順の簡略化: 再起動時の確認メッセージがあるため、誤操作を防ぐことができます。

『ライザのアトリエ3』カーク群島探索前の寄り道。

ライザ/レント/タオ/クラウディアの4人でカーク群島に向かうタイミング。

ランドマーク「聖堂臨む隠れ浜」でイベントが終わると、別のトリガーが引かれます。

それは、「クーケン島周辺エリアを歩き回れること」です。

島の探索を後回しにしてでも、ここを巡る価値は十分にあります。

新たな素材の発見

特に、聖堂臨む隠れ浜の北の崖をジャンプして届くエリア

「忘れ去られた廃村」では、ちょっと強めの敵が出てくるものの

属性値2の氷/風属性を持つ植物や

池から属性値3の黒水を入手可能です。

ランドマークさえ解放していけば

  • ファストトラベルで一気に進むことができる
  • 後々のキーメイク巡りが楽になる

などのメリットがあります。そして、レベル上げも行えます。

難易度を下げてでも周辺エリア全域を巡ることを推奨します。

『ライザのアトリエ3』カーク群島到着前の「超純水」調合。

  • ゼッテル
  • 旅人の水珠

が調合可能になったことで、「超純水」も調合可能になります。

4人での冒険を開始した後、

  • いい素材が手に入りにくい
  • そんな中でもSPを稼ぎ、他のスキルツリーを伸ばしたい

場合に有効です。

必要な素材

旅人の水珠

前述したとおり

  • ゼッテル

から調合します。

ユピトピニオン

隠れ家周辺、彩花の円環の更に西、大きなキノコから薪割り斧でユピトピニオンを採取できます。

  • 気体を持ち
  • 火と風属性

と、この超純水を調合する際に役立ちます。

調合

調合メニューから「超純水」を選びます。

効果1に旅人の水珠を入れます。

効果2の気体に、ユピトピニオンの属性値が3になるように入れます。

特性枠に、ユピトピニオンの属性値が4になるように入れます。

残り1枠は旅人の水珠や中和剤・青などを入れます。

  • 属性値3
  • 特性2つ
  • 調合 作成個数+1

の水ができます。

中和剤のマテリアル環を一発で埋めることができるので、他のマテリアル環に素材を回せます。

『ライザのアトリエ3』最序盤での「旅人の水珠」調合。

4人での冒険を開始する前に、調合の基礎となる「水」を作っていきます。

今回は「旅人の水珠」。

「影響拡大」を持つには至りませんが、

  • 安定した属性値
  • 高い品質
  • 原料「ゼッテル」の影響で必然的に数を増やせる

逸品です。また、これ自体が水であり、

  • ゼッテルで中和剤の特性を統合
  • 旅人の水珠に変換し
  • 別の中和剤に変換する

ことも可能です。

必須材料

ゼッテル

これは先に示したとおりです。

火属性の石材

隠れ家近くの岩を斧で砕くことで甘露岩を取得できます。

更に、「素材:石材付与」が発現された中和剤・緑があるとなお品質が高くなります。

調合

調合メニューから「旅人の水珠」を入れ、ゼッテルを投入。

甘露岩を属性値が3になるように入れます。

後は適当に。というのも、移動できる範囲がクーケン島/隠れ家周辺しかない最序盤では

  • 「雷属性の石材」が手に入らない
  • カーク群島の探索を開始しても属性値3ほどの石材を入手するのは大変

という制約がありますので、

最初の段階では特性を発揮できません。当然、影響拡大も発現できません。

とはいえ、

  • 後の超純水の必須素材であること
  • SPを稼げること

から、最初の内から調合しておくのは重要です。

『ライザのアトリエ3』最序盤でのゼッテルの調合。

こちらの記事の関連となります。

筆者が認識する最も大切な素材「紙くず」

クーケン島からも採取可能な「紙くず」は、本作で最も重要な素材だというのが筆者の結論です。

この、“なんてことない”素材は、中和剤の特性をまとめる「ゼッテル」の原料に役立つからです。

先に示した「属性値2」の中和剤・赤を用いることで、シナリオ最初の方から有用な調合素材を作ることができます。

ゼッテルの調合

こちらはカーク群島の探索を開始する前の、スキルツリーが伸びていない(投入回数増加も解放されていない)状況下での調合例です。

調合メニューから「ゼッテル」を選び、属性値1の紙くずを投入します。

属性値が2の中和剤・赤を2つ入れます。

七色葡萄を属性値が5になる組み合わせで入れていきます。

この段階で投入は完了。属性値1のアイテムではありますが、「自分が中和剤で狙った特性を2つ」持たせられることがポイント。

特に、これ自体が「燃料」なので、中和剤・赤のループに組み込むことが可能です。

特性を全て狙えないときは、このゼッテルを挟むことで特性をまとめることが可能です。

鍋の素を転用した弁当スープ。

スープジャーを使うことにして、日々のスープを工夫しています。

そんな中でバリエーションの広がりを見せたのが「鍋キューブ」などを用いたスープの作成でした。

寄せ鍋ベース

あっさりとしながらも出汁がきいています。海苔、油揚げとも映えます。

カレー鍋ベース

辛さと濃厚な味。かき玉にすることでマイルドに。

ごま豆乳鍋ベース

もとより濃厚だったこと、そしておかずの脂を中和するためにショウガをきかせました。

他のおかずが単調でもスープのベースを変えることでバリエーションが広がります。

OODAループの逆用:『ハリー・ポッターと炎のゴブレット』ウィーズリー家の双子から学ぶ心理戦(一部ネタバレ有り)

昨年読み終えたハリー・ポッターシリーズの原作小説。

ハリー・ポッターのあるシーンを読み返していた時、登場人物の行動がOODAループという意思決定プロセスと酷似していることに気づきました。

この記事では、OODAループに着目してみようと思います。

OODAループとは何か?

OODAループとは、アメリカ空軍のジョン・ボイド大佐が提唱した意思決定プロセスです。

  1. 観察(Observe):状況を観察し、情報を収集する
  2. 状況判断(Orient):収集した情報をもとに、状況を分析する
  3. 意思決定(Decide):次の行動を決定する
  4. 行動(Act):決定した内容を実行する

変化の激しい状況下での迅速な意思決定に役立つフレームワークですが、相手のOODAループを意図的に混乱させることで、優位に立つことも可能です。

OODAループの実例:映画『ハリー・ポッターと死の秘宝 Part2』

ホグワーツの守りを固める際のキングズリー・シャックルボルトたちがその好例です。

観察:(Observe)

戦略立案の際に

「マクゴナガル先生に伝えろ。こっちは私とリーマスで守る」
「了解」

まずは必要な人員をキングズリー自身とリーマス(ルーピン)であると判断。

状況判断:(Orient)

「いやディーン、ちょっと待て」

城外の大攻勢が見積と大きく違うことを判断。

意思決定(Decide)

「杖をもう1~2本、応援によこせと伝えてくれ」

ここでいう「杖」は「魔法を使える者」。つまり「戦えるもの」を指します。

行動(Act)

その言葉を聞いたフレッド・ウィーズリーとジョージ・ウィーズリーがすっと前に入ります。

戦場の状況を見て彼我の戦力を算出し、その「戦力」が行動する様は先に説明した「激しく変化する状況下での柔軟な意志決定」を可能にします。

OODAループの逆用例:小説『ハリー・ポッターと炎のゴブレット』

OODAループを逆用するとは?

OODAループを逆用するとは、相手に誤った情報を提供したり、選択肢を限定したりすることで、意図的に誤った判断をさせることです。

小説『ハリー・ポッターと炎のゴブレット』に登場するフレッド&ジョージ・ウィーズリーの「トン・タン・トフィー(ベロベロ飴)」作戦が、OODAループ逆用の好例でした。

トン・タン・トフィー(ベロベロ飴)作戦:OODAループをいかに破壊するか?

状況:

  • 夏休み、ハリーはダーズリー家に帰省中。
  • ダドリーは学校シーズン中に太り過ぎと診断されたため、家族全体(ハリー含む)を巻き込んでのダイエット中だった。
  • そんな中でウィーズリー家のロン/フレッド&ジョージの双子/アーサーがダーズリー家にハリーを迎えに行く
  • 居間が混乱する中、フレッド&ジョージがトフィーを落として煙突粉で去って行く。
  • これはフレッド&ジョージの開発したトン・タン・トフィー(見た目は美味しそうなトフィーだが食べると舌が猛烈に膨れ上がるいたずらアイテム)。
  • それを食べたダドリーの舌が1m近く膨れ上がり、さらなる混乱を呼び起こした。

ダドリーの思考の流れと、フレッド&ジョージの介入:

OODA段階ダドリーの思考の流れフレッド&ジョージの介入介入の結果
1. 観察 (Observe)「魔法の食べ物は危険だ!でも、これは美味しそう…」落としただけなので、敵意がないように見せかける観察情報が誤誘導される
2. 状況判断 (Orient)「落ちているなら安全かもしれない。甘いもの食べたい…」甘味に飢えている心理を利用し、警戒心を解く安全と錯覚させる
3. 意思決定 (Decide)「食べちゃおう!」選択肢を“食べる”しかない状況に誘導誤った決定を下す
4. 行動 (Act)食べるトフィーの効果で舌が膨れ上がるOODAループの完全破壊

フレッド&ジョージの巧妙な戦略

このループに加え、以下の戦略もありました。

  1. 「ダドリー自身の意思決定」に見せかけることで自己責任にする
  • 落ちたお菓子をダドリーが自主的に食べたと錯覚させることで、
  • 「魔法のせいだ!」と怒るのではなく、「自分のミス」と認識させる。
  1. 報復のターゲットをアーサー・ウィーズリーに誘導
  • フレッド&ジョージは煙突飛行粉(フルーパウダー)で逃亡。
  • ハリーもすぐに去るため、ダーズリー家が怒りをぶつけられるのはアーサーだけ。
  • アーサーの「魔法なら簡単に治せる」という考えと、ダーズリー家の「魔法そのものが脅威」という価値観が衝突し、さらに怒りを煽る。

他人の意志決定プロセスを誤誘導するだけでは無く、自身が安全圏に逃げる手段まで画策していたのです。

まとめ:OODAループ逆用の重要性

OODAループは、迅速な意思決定を支援するだけでなく、相手のOODAループを破壊することで、優位に立つための強力な武器となります。

フレッド&ジョージの戦略は、OODAループの逆用だけでなく、心理学的な要素も巧みに利用した高度な心理戦と言えるでしょう。

戦略立案においては、OODAループの活用と同時に、相手のOODAループをいかに妨害するかという視点も重要になることを示唆しています。

筆者の趣味、ボードゲームにおいても以下の逆用が考えられると思いました。

  1. 観察の欺瞞:相手に自分の手の内を悟らせない。
  2. 状況の誤判断:相手の観察を逆用し、他の手を打たせるように誘導。
  3. 意志決定の悪用:ブラフがそれに相当。油断している状況なら速攻も視野に入れます。
  4. 行動:自分が利する行動を取り、状況から去ります。

この、相手のOODAループを読み、逆手に取るメソッドはあらゆる状況に使えます。

Rubyスクリプト改修。(SSL証明書の有効期限確認)

SSL証明書の有効期限を確認するスクリプト、改修しました。

スクリプト内容

require 'openssl'
require 'socket'
require 'date'
require 'uri'
require 'timeout'

# ユーザーからURLを対話的に受け取る
def get_user_input
  print "チェックしたいサイトのドメインを入力してください(例: example.com): "
  domain = gets.chomp

  # 入力がhttp://またはhttps://で始まらない場合は、https://を追加
  domain = "https://#{domain}" unless domain.start_with?('http://', 'https://')
  
  domain
end

# 変数で指定したURLに接続して証明書の有効期限を取得するメソッド
def get_certificate_expiry_date(url)
  uri = URI.parse(url)
  hostname = uri.host
  ssl_socket = nil
  tcp_client = nil

  begin
    # タイムアウトを5秒に設定してSSL接続を確立
    Timeout.timeout(5) do
      tcp_client = TCPSocket.new(hostname, 443)
      ssl_context = OpenSSL::SSL::SSLContext.new
      ssl_socket = OpenSSL::SSL::SSLSocket.new(tcp_client, ssl_context)
      ssl_socket.hostname = hostname
      ssl_socket.connect

      # 証明書の有効期限を取得
      cert = ssl_socket.peer_cert
      expiration_date = DateTime.parse(cert.not_after.to_s)
      days_remaining = (expiration_date - DateTime.now).to_i

      return expiration_date, days_remaining
    end
  rescue Timeout::Error
    return nil, "サーバーへの接続がタイムアウトしました。"
  rescue => e
    return nil, e.to_s
  ensure
    ssl_socket&.close
    tcp_client&.close
  end
end

# メイン処理
def main
  # コマンドライン引数を確認
  url = if ARGV[0]
          # 引数でドメインが指定されている場合
          domain = ARGV[0]
          domain = "https://#{domain}" unless domain.start_with?('http://', 'https://')
          domain
        else
          # 対話的に入力を受け付ける
          get_user_input
        end

  expiration_date, days_remaining = get_certificate_expiry_date(url)

  if expiration_date
    formatted_date = expiration_date.strftime("%Y/%m/%d")
    puts "サイト #{url} の有効期限は #{formatted_date} です。残り #{days_remaining} 日です。"
  else
    puts "証明書の取得に失敗しました: #{days_remaining}"
  end
end

# メイン処理を呼び出し
main

改修内容

引数化したことです。

ruby ssl_checker.rb google.co.jp
サイト https://google.co.jp の有効期限は 2025/03/31 です。残り 61 日です。

と、スクリプトの後にドメイン指定で残り日数を示します。

ruby ssl_checker.rb
チェックしたいサイトのドメインを入力してください(例: example.com): google.co.jp
サイト https://google.co.jp の有効期限は 2025/03/31 です。残り 61 日です。

引数なしだと対話式に切り替わります。

これで、変数をハードコートする必要がなくなり、他のスクリプトにも組み込みやすくなりました。

撮影ボックスの故障と公言入れ替えのテスト。

昨年11月頃に買った撮影ボックス、LEDコントローラーが壊れてしまうトラブルが発生。

ただ、ボックスとして捨てるほどではなかったので、備え付けの光源を他のものに差し替えてのテストです。

テスト1

より大きいLEDになったためか、今まで当たらなかったところに光が入るようになりました。

ついでに足した鏡も貢献しています。

テスト2

こちらも性質上、暗くなりやすい造形ですが、これも光が入るようになりました。

現時点での検証:まずまず。

補助光を足したり構図を工夫することで、この運用はうまくいきそうです。

『ライザのアトリエ3』最序盤での中和剤の調合。

「中和剤」は本作の基本的な調合剤であると同時に

  • 火薬や石材などの素材として扱える
  • 特性ループにより高品質の素材の元になる

ため、終盤であっても(むしろゲームが進むにつれ)重要になってくる調合アイテムです。

本作が簡単に進むか難しく感じるかは、この、中和剤の作り方を序盤から理解するか否かにかかっています。

とはいえ、最初期の(カーク群島を目指すような)タイミングでは、投入回数の少なさに加え「そもそも良質な素材が取れない」制約があります。

そんな中で、多少、いい品質を作るためのTIPSです。

ケーススタディ:中和剤・赤

カーク群島を目指すタイミングでの最優先は「中和剤・赤」です。

  • 属性値が(このタイミングでは大きめの)2の素材が揃っている。
  • ゼッテルによる中和剤ループを組み込みやすい。
  • 基本攻撃アイテムフラムの原料としても有用

などの良好な条件が揃っています。

原料を入手。

中和剤・赤の基本材料は

  • 火薬
  • 燃料

です。とりわけ重要な「火薬」と「水」に沿っていきます。

火薬-セキネツ鉱

ランドマーク『彩花の円環』にある赤い岩をスウィングすることで得られるセキネツ鉱は

「火薬」を持ち、属性値がこの段階では2もあります。

水:七色葡萄

ライザの家から北東に延びる道で通常採取可能。

最序盤で属性値が「2」ある「水」を持つ素材。

基本的にこれを用いて調合します。

調合

調合メニューから「中和剤・赤」を選択して、効果1に属性値2のセキネツ鉱を入れます。

効果2に属性値2の七色葡萄と属性値1の氷属性を持つ属性値1の水を入れます。

効果3に、セキネツ鉱を2と1で足して3になるように入れます。

スキルツリーが最初の状況だと、この特性枠を1つだけ埋めることができます。

このタイミングで投入回数がリミットになるので、特性を1つだけ選んで調合を終えます。

こうして得た中和剤・赤は「属性値が2」ある火薬/燃料となります。

これ自体を中和剤・赤のループになります。

  • 最初は安定して属性値2の中和剤を作る。
  • 特性を更に詰めて属性値を増やしていく

を心がけることで、道中の調合に如実に差が出ていきます。

Page 19 of 263

Powered by WordPress & Theme by Anders Norén