![](/img/trans.png)
[英]DJANGO celery task is executed from shell but it's not executed from view
[英]Retrieve current host from within an executed task
我正在使用Fabric通過設置在幾台主機上執行一些遠程命令:
env.hosts = [host1, host2, ...]
我想在某些主機上執行一些任務,而有些則不需要。 有什么方法可以檢索執行任務的當前主機名?
任何幫助都會很棒。 謝謝,梅尼
為什么不使用其他主機角色?
from fabric.api import env, roles, run
env.roledefs['webservers'] = ['www1', 'www2', 'www3']
@roles('webservers')
def my_task():
run('ls -l')
此外,您可以從env
詞典中獲取當前正在執行的主機:
def my_task():
print 'Currently executing on {0}'.format(env.host)
eclaird的回答絕對可以幫助我在多個具有不同角色的主機上執行任務時更好地實踐。
雖然,在使用它時,似乎在任務中,env.host會給出當前主機名的名稱。
例如:
@parallel(pool_size=len(env.hosts))
def upload_to_s3(to):
awscreds = 'some credentials...'
cmd = '%s aws s3 sync /mnt/backup %s/%s/' % (awscreds, to, env.host)
run(cmd)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.