20190730のLinuxに関する記事は9件です。

cURLしてHTTPステータスが200以外だったら再起動する

背景

弊社の社内システムはLinux+Apache+Tomcatで動いているものがあるのですが、原因不明でTomcatが停止してしまい、HTTP503が発生する現象が発生していました。

言い訳

今どきApacheではなくてnginxにしたいし、Tomcatが停止してしまうのはバグなような気がしますが、それほどクリティカルなシステムでもないし、業務が停止してしまうほどではないので優先度:最低の状態。

表題のとおり

旧時代的な対応ですが、このような対応にしました。まあ、備忘録です。

keepalive.sh
#!/bin/bash

# 死活監視したいURL
REQUEST_URL=http://hoge/paka

HTTP_STATUS=`curl -LI ${REQUEST_URL} -o /dev/null -w '%{http_code}\n' -s`

echo `date '+%y/%m/%d %H:%M:%S'` "HTTP STATUS:"${HTTP_STATUS}

if [ $HTTP_STATUS = "200" ]; then
  echo `date '+%y/%m/%d %H:%M:%S'` "動いているよ!"
  exit;
else
  echo `date '+%y/%m/%d %H:%M:%S'` "死んでいるよ!"
  systemctl restart tomcat.service
fi

cronでこのシェルを実行する場合は環境変数に注意です。
本当はログの出力をしていたけど、それは省略。適当にやってください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LVMでボリューム拡張手順(虎の巻)

ボリューム拡張が必要になってくると思うのでその覚書

基本的にCentOS系のOSで検証をしているけど、Debianでも使えると思う

前提条件:VirtualBoxのHDDがVDI形式であること

vmdkだと可変ではないので拡張できない、そういった場合は別のHDDを作ってそれをアタッチメントすればよい

以下はVirtualBoxで拡張後にゲストOS内で認識させる方法

fdiskを実行して新規パーティションを立てる

ブロックサイズは認識されているので基本的にはおおもとの/dev/sdaを参照する。
/dev/sdaは

[root@localhost ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p
Disk /dev/sda: 33.3 GB, 33263140864 bytes ★ ここが 現時点のサイズと違う状態であれば使っていない空間がある
255 heads, 63 sectors/track, 4044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00070a84

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1306     9972736   8e  Linux LVM


パーティションを新規に作成するので"n"を選択して作成

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4) ★ 基本はこっちを選択する
p


今回はパーティション3を作成する。
限定的な容量追加など特別の事情がない限り後はデフォルトでOK

Partition number (1-4): 3
First cylinder (1306-4044, default 1306):
Using default value 1306
Last cylinder, +cylinders or +size{K,M,G} (1306-4044, default 4044):
Using default value 4044

確認のため"p"で確認をする。

Command (m for help): p

Disk /dev/sda: 33.3 GB, 33263140864 bytes
255 heads, 63 sectors/track, 4044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00070a84

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1306     9972736   8e  Linux LVM
/dev/sda3            1306        4044    21997670   83  Linux ★ここが追加されていればOK
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

nusterキャッシュ永続化

NusterはHAProxyを元に開発したキャッシュサーバで、HAProxyと互換性がある。
そしてHAProxyのACLを利用して細かいキャッシュルールを定義できる。新しいリリースしたv3.0.0.19では永続化機能が追加されて、永続化について紹介したいと思います。

ホームページ
https://github.com/jiangwenyuan/nuster

ruleベースで4つの永続化モードが使えます。

nuster rule name [key KEY] [ttl TTL] [code CODE] [disk MODE] [if|unless condition]
  • off: デフォルト、メモリのみに保存する
  • only: メモリに保存せず、ディスクだけに保存する
  • sync: メモリとディスクに保存してからクライアントに返す
  • async: メモリに保存してクライアントに返す、後ほどmaster processによってディスクに保存される

例えば

global
    master-worker
    nuster cache on data-size 10m dir /tmp/cache
    nuster nosql on data-size 10m dir /tmp/nosql
backend be
    nuster cache on
    nuster rule off   disk off   ttl 1m if { path_beg /disk-off }
    nuster rule only  disk only  ttl 1d if { path_beg /disk-only }
    nuster rule sync  disk sync  ttl 1h if { path_beg /disk-sync }
    nuster rule async disk async ttl 2h if { path_beg /disk-async }
    nuster rule others ttl 100

/disk-off はメモリのみに保存される
/disk-only はディスクのみに保存される
/disk-sync はメモリとディスクに保存してからクライアントに返す
/disk-async はメモリに保存してクライアントに返す。後ほどmaster processによってディスクに保存される
ほかはメモリに保存される

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

curlコマンドでSSLクライアント認証を行うには

概要

SSLクライアント証明書(p12ファイル)からPEMファイル(鍵付き証明書)を作成し、curlコマンドでSSLクライアント認証を行う。

実行環境

CentOS Linux release 7.5.1804 (Core)

手順

openssl インストール

opensslコマンドでPEMファイルを生成するので、opensslコマンドがない場合は下記手順を実行してください。

$ curl -O https://www.openssl.org/source/openssl-1.0.2n.tar.gz .
$ tar xvzf openssl-1.0.2n.tar.gz
$ cd openssl-1.0.2n
$ ./config -fPIC shared
$ make
$ make install
$ ln -sf /usr/local/ssl/bin/openssl /usr/local/bin/openssl

PEMファイル作成

opensslコマンドで鍵付き証明書を作成する。

$ openssl pkcs12 -in file.p12 -out cert.pem -nodes -clcerts

curlコマンドでSSLクライアント認証を行う

PEFファイルのパスは、その階層にいても相対パスまたは絶対パスで書く。

$ curl -E ./cert.pem URL

Authorization, Bearer トークンを使ったAPIがあった場合などは下記のようにヘッダにトークンを指定すれば認証できる。

$ curl -H "Authorization: xxxxxxxx" -E ./cert.pem URL

以上!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

curl よく使うコマンドを端的に

curlからwebAPIにPOSTする方法

ずいぶん前に下位10%のダメなエンジニアにだけ解けないパズルを解いた時にまとめたもの。

パラメータを直接指定して送る場合

shell
curl -v http://challenge-your-limits.herokuapp.com/challenge_users \
-X POST \
-d 'name=your-name&email=123456789@example.com&comment=Thanks!' | jq .

json形式で送る場合

shell
curl -v http://challenge-your-limits.herokuapp.com/challenge_users \
-X POST \
-H "Content-Type: application/json" \
-d '{"name":"your-name","email":"123456789@example.com", "comment":"Thanks!"}' | jq .

オプション

-v レスポンスヘッダを標準出力
-X リクエストの種類を指定
-H リクエストにヘッダを追加
-d ボディの追加
\ コマンドラインにおいて複数行入力したい場合に使う

manでdオプションの説明を見てみると

Sends the specified data in a POST request to the HTTP server

とあるので、この場合は本来XオプションでPOSTを指定する必要はないがオプションの紹介のために記載しておく

jq

jqはjsonをパースするためのコマンドで、|(パイプ)で繋げることで標準入力として受け取ったjsonを整形し標準出力に表示する

Appendix

urlにあるファイルをダウンロード

shell
 curl -O url
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

使ってるisp(プロバイダ)確認方法

traceroute 1.1.1.1

1、2番目に出てくるのがisp
1.1.1.1はCloudflareのパブリックDNSサービスのip

以上。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

アクセスログからユーザーエージェント(user-agent)を抜き出す(取得する)

以下、実際の活用例

cat /var/log/httpd/access_log* | cut -f6 -d'"' | sort -r | uniq

cat /var/log/httpd/ip\_direct\_custom_log* | cut -f6 -d'"' | sort -r | uniq

cat /var/log/httpd/ssl\_access\_log* | cut -f6 -d'"' | sort -r | uniq

cut ―行から固定長またはフィールド単位で切り出す
-f N番目のフィールドを抜き出す
-d 区切り文字を変更、デフォルトはタブ

sort 並べ替え
-r reverseの略、逆順で並べ替え
1フィールド目の値でソートがデフォルト

uniq 重複削除

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

アクセスログからユーザーエージェントを抜き出す

以下、実際の活用例

cat /var/log/httpd/access_log* | cut -f6 -d'"' | sort -r | uniq

cat /var/log/httpd/ip\_direct\_custom_log* | cut -f6 -d'"' | sort -r | uniq

cat /var/log/httpd/ssl\_access\_log* | cut -f6 -d'"' | sort -r | uniq

cut ―行から固定長またはフィールド単位で切り出す
-f N番目のフィールドを抜き出す
-d 区切り文字を変更、デフォルトはタブ

sort 並べ替え
-r reverseの略、逆順で並べ替え
1フィールド目の値でソートがデフォルト

uniq 重複削除

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux IPv6 関連コマンドメモ

Linux で IPv6 を利用する際の基本的なコマンドメモ

インタフェイスに付与されたアドレス確認

$ ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:a3:df:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 172.31.xx.xx/20 brd 172.31.xx.xx scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link 
       valid_lft forever preferred_lft forever

ルーティングテーブル

$ ip -6 route list type unicast
2xxx:xxxx:xxxx:xxxx::/64 dev eth0  proto kernel  metric 256  pref medium
fe80::/64 dev eth0  proto kernel  metric 256  pref medium
default via fe80::xxxx:xxxx:xxxx:xxxx dev eth0  proto ra  metric 1024  expires xxxsec hoplimit 64 pref medium

Ping 疎通確認

  • localhost
$ ping6 ::1
  • google
$ ping6 2001:4860:4860::8888

curl 接続確認

$ > curl -6 -i https://www.jpn.earth/remote_addr.cgi
HTTP/2 200 
date: Mon, 29 Jul 2019 14:54:49 GMT
content-type: text/plain; charset=UTF-8

2xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx

DNS

$ dig aaaa www.google.com +rec +short
2404:6800:4004:81a::2004

公開サービス

$ netstat -an -A inet6
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 :::80                       :::*                        LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む