ssh2_execで sudo service memcached restart
を実行した時に、再起動が行われずどうしたらよいのか方法をご存知の方に聞きたいです。
###現状
- コマンドラインからのssh接続でサービスを開始すれば問題なく開始されるので緊急度は低いです。
- 再起動を行うのはキャッシュのクリアを行うためなので、例えばワンライナーでクリア出来るようなコマンドがあるなどあれば、それに変更なども考えます。
ssh2_exec
やストリーム系の処理の経験もほぼ無いため、そもそもこの実装で良いのかという疑問がありますので、おかしい部分があれば指摘頂きたいです。
###該当のソースコード
PHP
1$cmd = 'sudo service memcached restart'; 2try { 3 $stream = ssh2_exec($connection, $cmd); 4 $streamError = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR); 5 stream_set_blocking($stream, true); 6 stream_set_blocking($streamError, true); 7 $result = fread($stream, 4096); 8 if (!empty($result)) { 9 $this->addStdout($result); 10 } 11 $result = fread($streamError, 4096); 12 if (!empty($result)) { 13 $this->addStderr($result); 14 throw new Exception($result); 15 } 16} catch (Exception $e) { 17 Log::error($e); 18} finally { 19 if (isset($stream)) { 20 fclose($stream); 21 } 22 if (isset($streamError)) { 23 fclose($streamError); 24 } 25}
###発生している問題・エラーメッセージ
7行目の$result
で返ってくるのはStopping memcached
のメッセージです。
ssh接続で、sudo service memcached status
をすると、memcached dead but pid file exists
となっています。
その後sudo service memcached start
をすると、問題なく開始されます。
###試したこと
-
コマンドを
sudo service memcached stop
に変えても同じでした。 -
コマンドを
sudo killall memcached
に変えても同じでした。 -
1行目の
$cmd
を他のコマンド(例えばdate
など)に変更すれば特に問題無く実行されますので、基本的には動作するコードです。変な部分は指摘ください。
不明点などあれば聞いてくださいませ。よろしくお願いいたします。
あなたの回答
tips
プレビュー