Quantcast
Channel: システム開発メモ
Browsing all 100 articles
Browse latest View live

Redisのmaxclientsを変更する時はmax open filesも変更する

実行環境:CentOS 6.7、Redis 3.0 Redisのconnected_clientsがデフォルトの上限10000に達していたので、maxclientsを上げようとしたが、エラーが出てしまった。 $ redis-cli info | grep connected_clients connected_clients:10000 $ redis-cli 127.0.0.1:6379>...

View Article


VirtualHostのServerNameに環境変数を入れる、あるいはワイルドカードや正規表現で対応する

ApacheとNginxの場合でそれぞれ対応方法を見ていく。 Apacheと環境変数 ApacheのVirtualHostのServerNameに環境変数から作る文字列を入れたかった。...

View Article


ファイルサイズだけを取得するコマンド

ファイルサイズだけを取得したい場合、ls -lとcutもしくはawkを組み合わせて取得する方法が真っ先に思い浮かぶ。 $ ls -l test.txt | cut -d' ' -f5 3104 $ ls -l test.txt | awk '{print $5}' 3104 コマンドを組み合わせなくても、ファイルサイズをbyte単位で取得するには、wc -c < ファイルだけでできる。wc...

View Article

コマンドで二つの時間の差分を取る方法

%H:%M:%S形式で二つ時間がかかれているファイルから、その二つの時間の差を取得する方法を考える。用途としては、ログファイルからstartとendの時刻を取り出し、その差分を計算するなど。 $ cat time.txt 17:34:21 19:21:14 dateコマンド、awkのmktime、rubyのTimeを使う方法をそれぞれ見ていく。...

View Article

最新のJDKのrpmをコマンドで取得する

最新のJDKのrpmをコマンドで取得し、yum installする。手動でダウンロードせず、JDKの更新がスクリプトで実施可能になる。 $ SITE=http://www.oracle.com $ URL=${SITE}$(curl -s $SITE/technetwork/java/javase/downloads/index.html | egrep -m1 -o...

View Article


IPアドレスを指定のプレフィックス長で変換する

192.168.1.0/24のようにプレフィックス24で表示されているIPアドレスの範囲をプレフィックス 26で表示してみる。 Rubyで実行するには、ipaddressライブラリをgemでinstallして使う。 $ gem install ipaddress ipaddress (0.8.3) $ ruby -r'ipaddress'...

View Article

ある正数以上の数で最小のNの倍数をワンライナーで求める

ワンライナーの前にRubyである正数に最も近いNの倍数を求めるスクリプトを作る。 例として、ある正数を引数で渡して変数given_nrに格納し、Nを8とする。スクリプトファイル名をmultiple.rbとする。 まず考えられる解法は、given_nrをNで割り、余りがでなければgiven_nrを、余りが出れば商に1を足した数にNをかけたものを出力する方法だ。 N=8...

View Article

Muninのプラグイン内でバックグラウンド実行したいときの注意点

Muninプラグインをshellスクリプト等で自作する中で、スクリプト内でバックグラウンド実行したいときは書き方に注意が必要だ。 例えば、スクリプト内で集計をして集計結果を出力したいとする。集計に時間がかかるので集計結果をファイルに吐いておき、出力は出力済みのファイルを読むだけにする。集計処理はバックグラウンド実行になる。 スクリプトを以下のように作成する。...

View Article


二段階認証と通常のパスワード認証をユーザによって分ける方法

Google Authenticatorによる二段階認証を導入すると、ユーザごとにgoogle-authenticatorコマンドを実行してシークレットキーを作らないと、ログインできなくなる。 二段階認証を導入したので、設定をしていないユーザのログインができないのは当たり前だが、一部のユーザだけ通常のパスワードによるログインを許可したい場合は、二段階認証の設定に追加設定が必要となる。 Google...

View Article


rbenvでOSのユーザごとにRubyのversionを分ける

rbenvはユーザごとにinstallし、Rubyもユーザごとにinstallするのが想定されている使用方法だが、Rubyのinstallをユーザに任せずシステム管理者がinstallする場合、rbenvをただ一つsystem wideにinstallして、どのユーザでもrbenvを使えるようにしたい。...

View Article

送信先IPアドレスをiptablesで変える方法

あるホストから別のホストへ通信する際の通信先のホストのIPをiptablesで変換する方法を記載する。 送信先IPアドレスをiptablesで変えたい時 iptablesでの実現の仕方を書く前に、送信先IPアドレスをiptablesで変えたいのはどのような時か。例を2つあげたい。 グローバル経由でRedis Sentinelに接続する プライベートLAN内でReplication +...

View Article

bash固有機能を使うときはshebangをbashにするだけでは安全とは言えない

プロセス置換等、/bin/shでは利用できず/bin/bashを使う必要がある場合、シェルスクリプトを書くときに、shebangを気にする必要がある。しかし、shebangで/bin/bashを指定しても、シェルスクリプト実行時にsh script.shとしてしまうと問題が発生する。 /bin/shと/bin/bashとプロセス置換の問題 shebangが/bin/shの問題点...

View Article

Muninの間隔を1分間隔に変更する

Muninの更新間隔をデフォルトの5分から1分間隔に変更する方法を記載する。(Munin version 2.0) Muninはcron(/etc/cron.d/munin)から起動されているのでcronの変更を行う必要があるが、cronの時間を変えるだけではダメ。変更作業中にMuninが動いて欲しくないため、一番はじめの作業としてcronのコメントアウトだけしておく。 #*/5 * * * *...

View Article


Muninで各サーバのeth0をまとめる

Munin(2.0系)で/etc/munin/munin-conf.d/に配置しているconfigに書いてある各サーバのeth0をまとめたグラフを出力する方法。 元々以下のように3台のサーバが定義されていたとする。 [product;server0001] address server0001 use_node_name yes [product;server0002] address...

View Article

安易に使わないほうがいいLinuxコマンド"fc"

fcというhistoryを扱うコマンドがある。危険で怖いコマンドのため安易に使わないほうがいい。...

View Article


安易に使わないほうがいいMySQLClientコマンド"edit"

前回、安易に使わないほうがいいLinuxコマンド”fc”を書いた。コマンドライン上で編集するときはEmacsキーバインドになるが、ヒアドキュメントなど長いコマンドを書くときにfcを使うとVimで効率よく書ける。しかしコマンド実行をキャンセルしようとした時の挙動が直感と異なるので、安易に使わない方がいいという主張だ。 全く同じようなことがMySQLクライアントコマンドでも言える。...

View Article

GitLabにpushするときコミットメッセージをチェックする

RedmineのチケットとGitのコミットを紐づけるために、コミットメッセージにrefs #チケット番号を入れることをルール化したい。 クライアントサイドフックであるpre-commit...

View Article


ON DUPLICATE KEY UPDATEをAUTO_INCREMENTのテーブルには発行しない方がいい

AUTO_INCREMENTはINSERTするたびにカウントアップして発番してくれるが、ON DUPLICATE KEY UPDATEを使用してINSERTではなく既存行のUPDATEになった場合もカウントアップされてしまう。実際にINSERTしている行数はたいしたことがないのに、ON DUPLICATE KEY...

View Article

wc -lでは文末に改行がないファイルの行数を正しく数えられない

最後に改行がある場合は以下の通り問題ない。 $ printf 'test\ntest\n' test test $ printf 'test\ntest\n' | wc -l 2 wc -lは改行の数を数えるため、最後に改行がないと本当の行数より1少ない数を返してしまう。 $ printf 'test\ntest' test test$ $ printf 'test\ntest' | wc -l 1...

View Article

各OSでのデフォルトI/Oスケジューラの違い

CentOS6とCentOS7とAmazon LinuxではデフォルトのI/Oスケジューラに違いがあるため、ioniceコマンドを実行するときやパフォーマンスチューニングをするときに注意が必要だ。 各OSでのデフォルトI/Oスケジューラ...

View Article
Browsing all 100 articles
Browse latest View live