覚え書き
10KBのkeyを1000個入れる。
awkで”後ろからn番目”を指定する
今日知ったこと。
awkはよく使うけど、後ろからn番目を指定する方法があることを知ったのでメモ。
cat access.log
[10/Jun/2015:23:01:04 +0900] "POST /hoge?a=12345 HTTP/1.1" 200 2597 2832 "-" "Mozilla/5.0 (Linux; U; Android 2.3.7; ja-jp; SonyEricssonSO-03D Build/6.0.A.5.14)" "yyy.yyy.yyy.yyy" "0.000"
[10/Jun/2015:23:02:04 +0900] "GET /hoge.jpg HTTP/1.1" 200 2597 2832 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4)" "xxx.xxx.xxx.xxx" "0.000"
ここから、IPアドレスの部分”yyy.yyy.yyy.yyy”を抜きたい場合とか、
awk '{print $(NF - 2)}' access.log
とすれば良い。
ただ、CentOS6系では使えて、CentOS7系では
コマンドライン:1: (FILENAME=a.txt FNR=1) 致命的: フィールド -2 へのアクセスの試みです
とエラーが出る。
後で調べておこう。
FTPログインの手間を減らす
覚え書き。
cron等でユーザー認証があるFTPに接続を行う場合に、ユーザー認証の応答を自動化する方法。
~/.netrcを作成し、以下の内容を記載する。
[bash]
<script class="brush:bash;" type="syntaxhighlighter" title="~/.netrc"><![CDATA[
machine FTPホスト
login ユーザー名
password パスワード
[/bash]
BeckyのMIMEタイプ追加
特殊な環境かもしれないけど、需要があるかもしれないのでメモ
メールソフト「Becky」からの送信メールに、【日本語のファイル名】を添付して送信すると、
受信環境によっては添付ファイルを見る事が出来ない事象の対応。
私が遭遇したのは、Backy⇒zimbra宛のメール、且つ、zimbraをiPhoneとかのIOS端末で使った場合。
【原因】
①Becky!の問題
⇒添付ファイルの形式を示す「Content Type」ヘッダーが「application/octet-stream」(不明確なバイナリデータとして認識)
として捉えられてしまう。
⇒添付ファイルを示すヘッダーは「name」だけど、ISO-2022-JPでエンコードされている為、「テスト.pptx」が
「”=?ISO-2022-JP?B?GyRCJUYlOSVIJUchPCU/GyhCLnBwdHg=?=”」
と解釈され、拡張子での判別も出来ない。
【対策】
取りあえず、becky側のMIMEタイプを追加すると問題が解決する。
※セキュリティ的には、あまり宜しくないので自己責任で。
レジストリキーに、以下を追加
【ワード2003/2007】
・application/msword
・application/vnd.openxmlformats-officedocument.wordprocessingml.document
【エクセル2003/2007】
・application/vnd.ms-excel
・application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
【パワーポイント2003/2007】
・application/vnd.ms-powerpoin
・application/vnd.openxmlformats-officedocument.presentationml.presentation
【PDF】
・application/pdf
logwatchのhttpエラーをサマリー化する
サーバーのステータスをレポートしてくれるlogwatchは、とても便利なツールだけど
デフォルトの設定だと、攻撃を受けた内容がエラーコード毎に表示されるので、とても見辛くなる。
(たまに1MBとか巨大なサイズになる)
404 Not Found
/game/img/01_b.jpg: 1 Time(s)
/game/img/02_b.jpg: 1 Time(s)
/game/img/05_b.jpg: 1 Time(s)
・
・
・
リソースは食うけど、403 Forbbidenと 404 Nof Found がログに大量に記録されても
セキュリティリスクは無いので、エラーのlogwatchで発生件数だけカウントするように修正。
【環境】
CentOS5.8 logwatch-7.3-9.el5_6(yumからインストールしたもの)
/usr/share/logwatch/default.conf/services/http.confをvimなどで開き、以下の2行を追加する。
$http_rc_detail_rep-403 = 10 $http_rc_detail_rep-404 = 20
設定後、logwatchのhttpdのレポートが以下のようにまとめられる。
Requests with error response codes
403 Forbidden SUMMARY – 5 URLs, total: 11 Time(s)
404 Not Found SUMMARY – 252 URLs, total: 1110 Time(s)
他の40xや50xのエラーは未対応だけど、取りあえずこれで様子見。
親子関係が崩れた時の対処
Redmineのチケットの親子関係が崩れて、親子の変更どころか更新すら出来なくなった時の対応のメモ。
mysql> select id,parent_id,root_id,lft,rgt from issues where id=2544;
+——+———–+———+——+——+
| id | parent_id | root_id | lft | rgt |
+——+———–+———+——+——+
| 2544 | 2541 | 2520 | 36 | 36 |
+——+———–+———+——+——+
1 row in set (0.00 sec)
id=チケットのID
parent_id=直接親子関係になっているチケットのID
root_id=最上位の親チケットのID
lft,rgtはよくわからないけど、ググるとチケットのlft, rgt が、親チケットのlft, rgt の範囲内に入っていないとダメらしい。
なので、強制的に親子関係を解除する。
update issues set parent_id=null,root_id=2544,lft=1,rgt=2 where id=2544;
どんなタイミングで発生するかは分かんないけど、Redmine運用してて初めて発生した事象なので復旧手順をメモ。
ioDrive for クラウド
gloopsのネットニュースを見てたら、ioDriveってワードが出てきた。
インフラエンジニア(のつもり)でioDriveの存在を知らないなんて・・・と言われそうだけど、
今検討しているサービス用のインフラで、IOがボドルネックになっている部分がチラホラあるので使えそう。
自前で準備すると高そうなので、クラウドで提供しているとこを探すと思うけど。
Fusion-io ioDrive の”非公式”標準価格/販売価格表
現時点でioDrive使っているところを軽く調べてみた。
とかかな。
ほとんどが今年の夏あたりにプレリリース出しているから、今後はもっと提供事業者が増えそうな気がする。
Redmineの期日を強制する
「終了が無いタスクはねぇ!」と上司にお叱りを頂く事もあり、期日を登録する事を忘れてしまう自分の為にカスタマイズ。
Redmineのバージョンは1.3.3
参考にしたのはこちらのサイト様
①期日入力を必須
app/models/issue.rbの「validates_presence_of」に「:due_date」を追加
validates_presence_of :subject, :priority, :project, :tracker, :author, :status, :due_date
②期日のところに赤字の「*」を付ける
app/views/issues/_attributes.html.erbの「due_date」のスタイルのとこに「:required => true」を追加
<p><%= f.text_field :due_date, :required => true, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for(‘issue_due_date’) if @issue.leaf? %></p>
WSUSの更新チェックをすぐ実行する
自分用メモ
コマンドプロンプトで
wuauclt /detectnow
を実行
passengerのRailsPoolIdleTime
Redmineの初回アクセス時とか、しばらく時間を明けた後の接続が非常に重い。
Aapcheのアクセスログに%Tを付けて「リクエストを扱うのに掛った時間(秒単位)」を取得すると、10秒も掛っている事が分かった。
Apache モジュール mod_log_config
調べたところ、RedmineをApacheで動かす為に使っているpassengerが、デフォルトで2分間、アクセスが無かったらRailsを止めているみたい。
つか、Redmineのページにも書いてあったの見落としていた・・・
Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用
このデフォルト値を変更する為、httpd.confに以下を追加してApacheを再起動する。
RailsPoolIdleTime 172800
※あまり時間を大きくするとリソースやら別の問題が出てきそうだから、とりあえず12時間に設定
あと、MySQLのスロークエリのログを取得する為、/etc/my.cnfに以下を追加
[mysqld]
long_query_time=2
log-slow-queries=/var/log/slow.log