あのときのログ

思ったこと、経験したことを忘れないようにするためのメモ。

crontab内のコマンドラインでの%(パーセント)の扱い

crontabそのものをcronで毎日日付つきでバックアップしようと思って仕込んだら全然うまく行かなかった時に調べて見つけた、神の啓示。

dateコマンド と crontab の コマンドライン中の %(パーセント)記号 - keigoiの日記

すっごくスッキリしたことは覚えてる。

ソースコンパイルしたPHPに後からpdo_pgsqlをインストールする

PHPからPostgresqlに繋ぎたいので、ソースコンパイルしたPHP環境(今回の例では5.4.7)に、pdo_pgsqlをインストールして下さいと頼まれた。 PHP環境の構築や拡張モジュールなどには正直なところ全く詳しくなかったので、 どうやるのか、あまりに見当つかないものの、調べてやってみることに。

と思ってしばらく探したら、以下の記事がほとんどドンピシャ大当たり。ありがとうございます。

PHPをコンパイルした環境に、後からpgsql.soなどのモジュールを追加する方法 - Web系エンジニアbcoのメモ帳

以下、自分の環境でやった手順をメモる。

前提となるphp環境について

  • php 5.4.7
  • phpのインストール先:/opt/php
  • /usr/local/bin/php は、/opt/php/bin/php へのSymlinkとしている
  • コンパイルしたソースの置き場所:/usr/local/src/php-5.4.7

作業手順

現環境のPHPコンパイルしたソースの置き場所にある、extentionディレクトリへ行く

# cd /usr/local/src/php-5.4.7/ext/pdo_pgsql

phpのパス確認

拡張モジュールは今使っているphpのパス上にあるツールを使って生成するため、phpのパス(インストールパス)を確認する。

# ls -l /usr/local/bin/php
lrwxrwxrwx 1 root root 16  5月 13 16:21 2014 /usr/local/bin/php -> /opt/php/bin/php

phpizeでconfigureファイルを作成

phpizeとは?

拡張モジュールをビルドする低レベルなビルドツール。autoconfやautomake m4等のビルドツールが別途必要になる。これを使用することにより、PHPをソースから再コンパイルすることなく拡張モジュールをビルドすることができる。
引用:phpizeとは - PHP用語 Weblio辞書

インストールパス上のphpizeを実行すると、configure実行ファイルが出来る。

# /opt/php/bin/phpize

configureを実行

ここでは、--with-pdo-pgsql を入れることと、--with-php-config で、現在のphpパス上にあるphp-config実行ファイルを指定する必要がある

# ./configure --with-pdo-pgsql --with-php-config=/opt/php/bin/php-config

make実行

# make
# make test
# make install
Installing shared extensions:     /opt/php/lib/php/extensions/no-debug-non-zts-20100525/

インストール完了。これで、拡張ディレクトリにpdo_pgsql.soファイルが出来る。

php.iniファイルを編集

/etc/php.ini に、; extensionsのディレクトリと対象のモジュールの名前を記述する。

; 拡張モジュールの置き場
extension_dir =  /opt/php/lib/php/extensions/no-debug-non-zts-20100525/

; 利用するextension
extension = pdo_pgsql.so

apacheを再起動

# /etc/init.d/httpd restart

1時間ごとにlogrotateする方法

ログファイル管理はlogrotateを使って週1回または1日1回ローテートするように仕掛けたらひとまずOK。だいたいのケースでは。

が、普通に設定したら最短で1日1回しかローテートできないので、ログファイルが数百MB、数GBと大きくなる場合にはOKとは言えない。 できれば1時間に1回ローテートできないものか。

単純な発想だが、1時間に1回、cronで強制的にローテート実行させることで可能である。 以下、logrotateの基本的な設定方法の確認の意味も込めて、手順をメモっておく。

1.アーカイブ先(olddir)作成

アーカイブ先を分けるのは必須ではないが、分けておくとログディレクトリ直下には常に最新のログのみが書き出されているのですっきりする。

# mkdir -p /var/log/nginx/archives

2.logrotate設定

毎時ローテートさせたいログファイル専用の設定ファイルを用意する。

# mkdir -p /etc/logrotate.hourly
# vi /etc/logrotate.hourly/nginx

気をつけるのはローテートさせる回数とファイル名(日付・タイムスタンプ付にする)。 あとは好みに応じて設定。

/var/log/nginx/huge_access.log {
    create 0644 nginx nginx
    daily              # cronで実行するため、実質的に意味なし
    rotate 720         # 1ヶ月保持出来るローテート回数(24回/日 × 30日)
    missingok
    notifempty
    compress
    dateext             # ファイル名に日付を付ける
    dateformat -%Y%m%d-%s   # 毎時生成されるためタイムスタンプを付ける
    olddir /var/log/nginx/archives
    sharedscripts
    postrotate
         [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

※dateext, dateformatの "%s" は、logrotateのバージョンによって使えない場合もある。

3. 設定テスト

-d デバッグモード(dry-runされて、ローテートされない)で実行し、設定エラーが出ないか確認

# logrotate -dv /etc/logrotate.hourly/nginx

4. 初回実行

新規にローテート対象となったファイルは、初回実行時に /var/lib/logrotate.status にエントリ追加されるだけでローテートされないので、cronでスケジュール実行される前に1回手動で実行する

# logrotate -v /etc/logrotate.d/logrotate.hourly/nginx

※1回目は、いずれのログも /var/lib/logrotate.status にエントリがない、または既に毎時ローテートされているファイル のどちらかのため、 dailyローテートのテストとしては、ローテート対象外(log does not need rotating)という結果になる。

5.ローテート履歴(logrotate.status) 確認

対象のログが、logrotate.status エントリに本日日付で入っていることを確認。

# cat /var/lib/logrotate.status

logrotate state -- version 2
      ・
      ・
    (略)
"/var/log/nginx/huge_access.log" 2015-8-29                      #←これ

6. cron設定

5までで、毎日3:00以降の任意のタイミング(cron.dailyの実行タイミング)でローテートが実施されるようにはなった。 ただ、これだけでは日次ローテートしかされないため、cronで毎時実行させる。

# logrotate -f で強制ローテート実行
0 * * * * /usr/sbin/logrotate -f -s /var/lib/logrotate.status /etc/logrotate.hourly/nginx 

これで設定完了。

・・・と、これを書いている最中、既に3.8.5からhourly設定可能になっているという情報を見かけ。今度使ってみよ。

https://fedorahosted.org/logrotate/browser/tags/r3-8-8/CHANGES

参考

logrotate 設定方法

タイトルとか決めてないけどこのままでもいいかもしんない: logrotateでnginxのログを1時間ごとにローテートをする

Gitでリモートブランチをローカルにチェックアウトする

今のところ頻繁にやる作業ではないため、忘れがち。 なんだっけ・・・とググってたらドンピシャだったので備忘録代わりに貼らせて頂きます。

sessan.hatenablog.com

新人アドテクエンジニア向け学習コンテンツ

インターネット広告の会社に勤めているのですが、5月に配属されてきた新卒のエンジニアの卵に、「どうやって勉強すればいいですか?」と聞かれたのと、以前何人かに「どうやって情報収集していますか?」と聞かれた経験があったので、まずは参考になるサイトをジャンルごとにピックアップしてみました。

業務(広告、マーケティング)系

  • Markezine

markezine.jp

アドテクに関わる人は、特に下記コンテンツは役に立つと思います。

  • ここからはじめよう!アドテクノロジー基礎講座一覧

markezine.jp

  • Web担当者Forum

web-tan.forum.impressrd.jp

エンジニア向けの技術コンテンツではありませんが、広告効果指標の用語説明など、 ネット広告運用の業務知識として役立つ記事が満載です。

  • 業界人間ベム

http://g-yokai.com/

これは何気に自社で運営しているブログで、ネット広告業界の著名人、横山隆治 氏が書いています。 このブログも結構この界隈では有名らしいです。

また、こんなふうにまとめてくれているところもありました。

  • NAVERまとめ 新人webマーケティング担当者にオススメのサイトまとめ

matome.naver.jp

僕はNAVERまとめでまとめたことはありません。。

ITニュース、技術ポータル系

エンジニア向けの技術系コンテンツが豊富なポータルサイトがよく使えます。 IT系出版社が運営してるのが多いです。

  • gihyo.jp

gihyo.jp

www.atmarkit.co.jp

codezine.jp

上記3つは実装系の話題が多いサイトでかなり使えます。

  • ITPro

itpro.nikkeibp.co.jp

エンタープライズ系のニュース、コンテンツが多いですが、 ここは技術情報(コマンドリファレンスなど)も多いです。

  • TechCrunch

jp.techcrunch.com

Webスタートアップ系のニュースが多いとこです。

ニュース系の話題や個別の記事は、自分から行って色々見るのももちろんいいですが、 だいたい検索流入するか、FB、Twitter、メルマガから気になるのを見るという使い方が良いような気がします。

ブログ系

  • Qiita

qiita.com

アカウント含め基本的に個人ですが、今や技術系の話題はググると高確率で当サイトがヒットします。 個人の技術ネタのストック先は普通のブログよりこっちに書く方が反応が良いくらい。 かなりの数のエンジニアが寄ってきていると思ってよいです。

* Web系企業の公式ブログ

careerhack.en-japan.com

各社のエンジニア達が書いているブログがここに集まっています。 気になるものをブックマーク、いいね!、フォローなどしてください。

Q&Aサイト

プログラムに関するあれこれを聞くと、「お、知ってるぜ」と思ったエンジニアが返してくれるQ&Aサイト。

  • stack overflow

ja.stackoverflow.com

技術Q&Aサイトの有名どころです。 英語が本家ですが、日本語版もいつからかできたみたいです。

  • teratail

https://teratail.com/

stack overflowの日本語版の代わり?と思いましたが、 目指しているところは「勉強会」だそうで、ちょっと違うコンセプトのようです。

hatenanews.com

回答が最速52秒で返ってきたとか。

動画学習コンテンツ

  • ドットインストール

http://dotinstall.com/

動画でプログラミングの学習ができるありがたいサイトです。

フォローしておくべき人

ここまで挙げたのはサイトですが、情報収集は書いてある場所よりも「良い情報を知っている人」を知っていること、いわゆる "know who" が重要という側面もあるので、その参考に少しだけ以下もメモっておきます。

  • 2015年新米エンジニアがフォローすべきツイッターアカウント50選

http://goo.gl/JHdZ7c

  • Web担当者必見!今すぐフォローすべきWebマーケティング界隈の著名人Twitterアカウント51選

https://ferret-plus.com/611

  • 今すぐフォローすべきAWS界隈の素晴らしきエンジニア達 #jawsug | Developers.IO

http://dev.classmethod.jp/cloud/aws/lets-follow-aws-engineers-now-2014/