ControllerからShellのプログラムを実行させたかったので、調べたら[exec]を使用して出来ることがわかったので、
やろうとしたら!ハマりました…
Controllerの処理
1 2 3 4 5 6 7 |
/** * Shell内の処理を実行させる */ function ●●●●() { // shell実行 exec('php /var/www/●●●●/●●●●/cake/bin/cake.php ●●●● > /dev/null &'); } |
●●●●は開発環境に合わせてください。
[注意]
「whoami」を使用して現在のユーザー名を表示して、ユーザー名を確認した方がいいです。
- Controller側で確認する方法
1 2 |
// 現在のユーザー名を表示 echo exec('whoami'); |
- Linuxコマンドで確認する方法
1 |
whoami |
エディタからサーバーにログインし「whoami」入力してEnter
[ハマった理由]
ユーザー名「hoge」の開発環境で、いくら[exex]をやってもshellのプログラムが処理されない!
何かと思ったら…Controller側でユーザー名が「ec2-user」になっていた!
Linuxコマンドで確認したら「hoge」だった。
Controller側では開発環境のユーザーが「ec2-user」になっていて、サーバーのユーザーが「hoge」で、
「ec2-user」「hoge」が異なっていると、どうやらうまくいかないらしい…
[exec]は簡単に利用できて便利だけど、うまくいかないとハマることがわかった。
エラーも出ないし、戻り値がないので余計に苦労しました。