2013年3月31日日曜日

[Powershell] 日付計算とか日付に関するあれこれ

いきなり仕事でPowerShellいじってと言われてちょっと困惑、
プログラム触れてちょっと嬉しいTearTheSkyです。

久しぶり過ぎて忘れまくっているんですが…
どのプログラムでも必要になる、日付計算

まずPowerShellで日付を取得するのはget-dateコマンドです。
PS C:\Users\TearTheSky> Get-Date

2013年3月31日 11:41:11

こちらのサイトを参考にさせていただいたんですが、
PowerShell/Get-Dateで前日、翌日、前月、翌月などの日付を取得する方法

PowerShelだと日付型のオブジェクトに対して、
addDays
addMonths
addYears
といったプロパティが利用できるようです。

以下のようにすると、面倒くさい日付計算なしに、
1ヶ月前の日付を取得することが可能です。

PS C:\Users\TearTheSky> (Get-Date).addMonths(-1)

2013年2月28日 12:10:32


これはすごく便利ですね。

で、問題はここからで、


こーいう風に変数に入れたくなるじゃないですか。

PS C:\Users\TearTheSky> $lastmonth = (Get-Date).addMonths(-1)


そしたらこういう風に表示されますよね。

PS C:\Users\TearTheSky> $lastmonth



2013年2月28日 21:05:21


で、今のままだと$lastmonthはdate型だから、文字列型…stringにしたいと思うじゃないですか。
それでこうしてみたんです。


PS C:\Users\TearTheSky> [string]$lastmonth = (Get-Date).addMonths(-1)

PS C:\Users\TearTheSky> $lastmonth

02/28/2013 21:05:46

PS C:\Users\TearTheSky>


!?

いや、アメリカ式表記にしなくていいから!

そこで思い返りました。
俺が欲しいのって、yyyymmdd形式の8桁の情報だよな…と言うことは
こうすれば…


PS C:\Users\TearTheSky> $lastmonth = (Get-Date -format "yyyyMMdd").addMonths(-1)

[System.String] に 'addMonths' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。

発生場所 行:1 文字:53

+ $lastmonth = (Get-Date -format "yyyyMMdd").addMonths <<<< (-1)

    + CategoryInfo          : InvalidOperation: (addMonths:String) []、RuntimeException

    + FullyQualifiedErrorId : MethodNotFound


!?

まじかよ…

PS C:\Users\TearTheSky> (Get-Date -format "yyyyMMdd").gettype().fullname

System.String

-format スイッチを使うと、戻り値は文字列型になっちゃいます!

めんどくせえ…('A`)

ということで、結局こうしました。

PS C:\Users\TearTheSky> $lastmonth = (Get-Date).addMonths(-1)
PS C:\Users\TearTheSky> [string]$lastmonth = (Get-Date).addMonths(-1)
PS C:\Users\TearTheSky> $lastmonth = $lastmonth.substring(6,4) + $lastmonth.substring(0,2) + $lastmonth.substring(3,2)
PS C:\Users\TearTheSky> $lastmonth
20130228

やったね☆(ゝω・)v

2013年3月10日日曜日

[#CentOS][#Apache]Apacheにアクセスできない


Apacheが起動するようになったんだけど、なぜかクライアントからアクセスできない…。

ポートが開いているか確認

# netstat -ln | grep 80
tcp        0      0 :::80                       :::*                        LISTEN
unix  2      [ ACC ]     STREAM     LISTENING     8801   private/smtp
unix  2      [ ACC ]     STREAM     LISTENING     8805   private/relay
unix  2      [ ACC ]     STREAM     LISTENING     8809   public/showq

LISTENしてる。
状態確認してみても



$ /etc/init.d/httpd status
httpd は停止していますがサブシステムがロックされています


ん??
なにこれ。
ググってみると、80番が競合とかしてるんじゃないの?とのこと。

# /etc/init.d/httpd status
httpd (pid  1863) を実行中...

rootだと実行中になってるよね。


$ sudo /etc/init.d/httpd status
httpd (pid  3128) を実行中...

これは権限上そうなるというだけで、問題ないみたいだ…。


ググってみたところ、ロックファイルのせいかもしれないということで、ロックファイルを削除…


# rm /var/lock/subsys/httpd

結局原因はiptablesの設定不足でした。

iptablesについてはまた纏めて別記事にしよう。

[#CentOS][#Apache] CentOS6 でApacheが起動できない



CentOS 6 で httpd を起動させようとした時のこと

$ sudo /etc/init.d/httpd start
httpd を起動中: httpd: bad user name apache   [失敗]

なんじゃこりゃ。


■問題
Apacheが起動できない。問題はapacheユーザ


■原因
httpd.confには ユーザ:apache グループ:apache でhttpdを起動するようになっている。
ユーザとグループを確認してみよう…


$ cat /etc/passwd | grep apache
$


ユーザが居ない…


$ cat /etc/group | grep apache
apache:x:48:

グループはある。なんでこうなってんだ?


■対処
ユーザ「apache」を作ってグループ「apache」に入れてあげよう。


# useradd -g apache apache
useradd: /etc/passwd をロックできません。後でもう一度試してください。


は?(#゚Д゚)


# ll /etc/*.lock
-rw-------. 1 root root 5  2月 12 07:29 2013 /etc/passwd.lock
-rw-------. 1 root root 5  2月 12 07:29 2013 /etc/shadow.lock

これを消すか

# rm /etc/passwd.lock
rm: remove 通常ファイル `/etc/passwd.lock'? y
# rm /etc/shadow.lock
rm: remove 通常ファイル `/etc/shadow.lock'? y


これでもう一度apacheをuseraddして…あれ、もしかしてロックファイルがApahceをインストール剃る前からあって、もしかしてyumのインストールシーケンスの中でユーザ作成だけ失敗してたりしてるのかな?

ということでApacheをインストールし直す方向で。

# yum remove httpd
$ sudo yum install httpd httpd-devel mod_wsgi

Pythonの勉強したいからmod_wsgiも入れてます。
で、yum入りました。


Transaction Summary
================================================================================
Install       3 Package(s)

Total download size: 1.0 M
Installed size: 3.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): httpd-2.2.15-26.el6.centos.x86_64.rpm             | 821 kB     00:00
(2/3): httpd-devel-2.2.15-26.el6.centos.x86_64.rpm       | 150 kB     00:00
(3/3): mod_wsgi-3.2-3.el6.x86_64.rpm                     |  66 kB     00:00
--------------------------------------------------------------------------------
Total                                           2.2 MB/s | 1.0 MB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : httpd-2.2.15-26.el6.centos.x86_64                            1/3
  Installing : mod_wsgi-3.2-3.el6.x86_64                                    2/3
  Installing : httpd-devel-2.2.15-26.el6.centos.x86_64                      3/3

Installed:
  httpd.x86_64 0:2.2.15-26.el6.centos httpd-devel.x86_64 0:2.2.15-26.el6.centos
  mod_wsgi.x86_64 0:3.2-3.el6

Complete!


よし、もっかい行ってみよう。


$ sudo /etc/init.d/httpd start
httpd を起動中: httpd: apr_sockaddr_info_get() failed for db-cent6-1
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]

キタ!(゚∀゚) 条件付きだけどとりあえず起動するようになった。


WSGIの実行テストはまだできない…

2013年3月2日土曜日

情報処理技術者試験 データベーススペシャリスト 松岡修造で分かる2相コミット

こんにちは。データベーススペシャリスト試験に向けて
勉強を少しずつ開始しています。

仕事忙しくて今回も勉強時間確保できなくて落ちそう…
とか言ってるから落ちるんだよな。
頑張らないと。


さて、過去の自分のつぶやきをたどっていたら
データベースのコミット処理方式の2相コミットについて
こんなつぶやきをしていました。

どうやら2相コミットとは





ということらしい。
つまり、


全体一致でCommitしない限りロールバックっていうことですかねー。



データベースはに限らないですけど、試験に出るIT要素は、ちゃんと環境を用意して触ってみないと何かよくわからないままフワフワした感覚で覚えちゃいますよね。で、すぐ忘れる。
こうやってつぶやいたらまとめる勉強法は有りかもしれませんね。
そして自分のつぶやきを残しておくことはとてもいい事だなと思いました。