カテゴリー別アーカイブ: レンタルサーバー

Movable Typeアップグレード後にmt.cgiにアクセス出来ない時の確認事項

アップグレード時に、
http://example.com/mt/mt.cgi
にアクセスしようとして、500 Internal Server Errorなどになった場合は、

アップロードしたcgiファイル郡のパーミッションが「755」になっているかを確認!

644とかになっていたら500 Internal Server Errorが返ってきちゃいます。

ロリポップ!(チカッパ)でcron+ssh+rsyncにハマった。

ssh経由でログインして実行すればうまくいくシェルスクリプトがcronでは動かない。
エラーメッセージは、「/usr/bin/rsync: Permission denied」
スクリプトの内容は、あるディレクトリ以下のファイルを別サーバに同期(バックアップ)。

以下のようなスクリプト
——————————
#!/bin/sh

/usr/bin/rsync -a –delete ~/test_dir/ example.com:~/test_dir
——————————

24時間ほどハマり、なんとか解決。
/usr/bin/rsyncを~/web/以下にコピーし、それを使う。
——————————
cp /usr/bin/rsync ~/web/bin/
——————————

修正後のシェルスクリプト
——————————
#!/bin/sh

~/web/bin/rsync -a –delete ~/test_dir/ example.com:~/test_dir
——————————

これでOK。

ちなみに、SSHの秘密鍵のパーミッションは600にすること。
開けすぎてもエラーになる。注意。

[WordPress] テーマ編集画面で403(FORBIDDEN)

WordPressのテーマ編集画面でちょこちょこっといじって「ファイルを更新」ボタンを押すと403エラー(FORBIDDEN)。アク禁です。

えーーーーー!!

調べてみると使っているレンタルサーバーの問題でした(ロリポップ!)。

最近ロリポップ!に搭載された「WAF(ウェブアプリケーションファイアウォール)」機能!
不正アクセスによるサイトの改ざんや情報漏洩を防ぐ機能だそうです。 ロリポップ!では全プランでWAFを標準装備。

以前からあるドメイン(サブドメイン)では設定が無効になっているのですが、新規でサブドメインを作成するとWAFがデフォルトで有効になっているようです。これが問題だったか・・・。

設定場所は、
管理画面>WEBツール>WAF設定
です。
ドメイン(サブドメイン)毎に有効・無効の設定が可能です。

設定を「無効」にして・・・テーマ編集を試すと・・・

ええええ!まだエラー(403)出る!

なんでやねん!

あ・・・

「 設定変更後、反映に5~10分ほど時間を要します。」

焦った^^;

その後、無事エラーが出なくなる。

サイトの構築・修正がひと通り終わったらWAFを有効にしておけばいいのかな。

cron登録数1個で複数の間隔で実行する方法

レンタルサーバーによってはcronの登録数は1つだけー!みたいなのもよくありますが

実行したいスクリプトを呼び出す役割のcron用スクリプトを書けば複数の間隔で複数のスクリプトを実行することができます。

例えば、cronに登録するスクリプトを「cron.php」とかにした場合。この「cron.php」はサーバーが許す一番最小実行間隔で実行するとします。(例えば1分ごと)

これで「cron.php」は1分毎に実行されるので、あとはその中で条件分岐させて色んなタイミングでいろんなスクリプトを呼び出せばOKです。

例えば10分毎に一回実行したスクリプトがあるときは

switch(date('i')%10) {
 case 0:
  include(/home/xxxx/xxx/xxxx/oppai.php);
  break;
 case 1:
  ・・・・・・
  break;
}

の様に書きます。呼び出すスクリプトが大量にある場合は上記のようにswitch文でも使って実行時間をうまく分散させるのがレンタルサーバー様に嫌われないコツです。

▼うまく分散させる振り分けのサンプル
・毎分1回実行するもの→そのまま毎分実行させる(しかない。分散のしようがない)。
・10分毎に1回実行するもの→「分」の下一桁が6,7の時に実行(最大2個に分散できる)
・毎時1回実行するもの→「分」の下一桁が0,1,2,3,4,5の時に実行(最大36個に分散できる)
・1日1回実行するもの→「分」が58 の時に実行(時間毎に振り分ければ最大24個に分散できる)
・毎週1回 実行するもの→毎日2:59に実行(曜日毎に振り分ければ最大7個に分散できる)
※それぞれの間隔で実行したいスクリプトの量によって数字は微調整すればよい。

 

レストランが作るこだわりの逸品から会議弁当やピザチェーンまで、出前・宅配の総合グルメサイト『ぐるなびデリバリー』

[ロリポップ!] PHPがブラウザでは動くが、cronでは動かない(ハマリ度約3時間)

3時間くらいハマリましたね。(見栄張ってるんで実際は5時間くらいハマってたと思います)

phpで書いたデータをDBに突っ込むプログラムが、

ブラウザでは実行できるんだけど、cronでは動かない。(実際にはプログラムは実行されてたんだけど、DBには突っ込まれていなかった、って感じ)

今回のハマりポイントは2つあります。

1つ目は、ロリポップ!のPHP設定でphp5.3を使用する設定していたんだけど、cronの場合はこの設定が反映されるわけではない。cronでphp5.3を使うにはパスを書く必要があった。プログラムの1行目に以下のように。(ロリポップ!cronの設定

#/usr/local/php5.3/bin/php

2つ目のポイントは、プログラムの中にphp5.3以降で有効になった記述方法を使っていたということ。この内容はコレです↓

$oppai = (get_oppai() ?: 0);

「三項演算子」というやつです。この、?と:の間を省略する形はphp5.3からできるようになった文法だったのです。そりゃオッパイゲットできなかったわけです。

なんでこのことに気づいたか。

それは、PHPのオンラインマニュアルで流し読みしていた時に瞬間視記憶としてある文章が頭に残っていたからです。その文章とは

「・・・・・・PHP 5.3 以降・・・・三項演算子のま・・・かの部分をな・・・・・・ともできる・・・・になりました。 ・・・・・・・・・・・・・」

これやーーーーーーって感じでした。

これ、たまたま気づけたけど、実際はもっとハマリ度高めだと思いますね。