1
0

More than 5 years have passed since last update.

startしたのにstartしないよ!

Posted at

例:Apache2を起動

fabric.py
from fabric.api import env, sudo


def servers():
    env.hosts = ["b13t.net"]


def startd():
    sudo("service apache2 start")

とか書いて,shellで

$ fab servers startd

とかすると,

[b13t.net] Executing task 'startd'
[b13t.net] sudo: service apache2 start

[b13t.net] out:  * Starting web server apache2
[b13t.net] out: httpd (pid 20130618) already running
[b13t.net] out:    ...done.
[b13t.net] out: 


Done.
Disconnecting from b13t.net:65537... done.

などとドヤ顔されますが,実際にsshで入ってps axしてもapache2は居ないしservice apache2 stateしてもNot runningとか言われてこの世の絶望を味わうわけです.

じゃあ絶望を振り払うにはどうすればいいのかというと

def startd():
    sudo("service apache2 start", pty=False)

と,pty=Falseを書けば絶望せずに幸せになる訳です.
ぼくは英語が読めないのでよくわかりませんが,
http://stackoverflow.com/questions/6379484/fabric-appears-to-start-apache2-but-doesnt
http://docs.fabfile.org/en/1.6/api/core/operations.html#fabric.operations.run
ここを読むと,pty=Trueの時の仮想端末がなにか情報を漏らしてしまっているのでしょうか.

事前にfabtoolsをpip installとかしてenv.userに十分な権限を与えられたuserを指定してあれば,以下でも起動するようです.(未検証)

from fabtools import service
def startd():
    service.start("apache2")
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0