2014-10-31 46 views
0

我需要從當前cgroup外部的systemd服務運行外部程序。 我發現了一個systemd-run工具,它可能會解決這個問題,但我仍然堅持systemd版本204,它尚不可用。 還有其他解決方案嗎?如何在獨立cgroup中從systemd服務運行外部程序

我更詳細的問題:

應用捆綁在Debian軟件包,並安裝和運行本身systemd服務。 此服務稍後會下載更新版本的應用程序並運行dpkg -i myapplication.deb。 在安裝升級過程中必須停止服務 - 但它不會停止,直到cgroup中的所有進程結束。現在我們有死鎖,因爲dpkg本身就在這個cgroup中運行。服務停止超時後,dpkg被終止並且未安裝升級。

回答

1

您可以在/ run/systemd/system路徑中動態創建您的服務。該路徑是運行時服務目錄。

稍後,告訴systemd重新載入其狀態。一旦重新加載完成,現在systemd知道你的服務。開始您的服務將發生在服務自己的cgroup中。

我想你可以做這樣的事情:

#!/bin/sh 

printf "[Service]\nType=oneshot\nExecStart=dpkg -i myapplication.deb" \ 
> /run/systemd/system/my-dpkg.service 
if [ -f "/run/systemd/system/my-dpkg.service" ]; then 
    systemctl daemon-reload && \ 
    systemctl start dpkg.service 
fi 
+0

歡迎StackOverflow上。幾乎任何時候你想發佈代碼,或者你想保留格式的數據,你都可以用四個空格(或一個製表符)縮進它。 #是標題的標記簡碼,所以不是'#!/ bin/sh',我們在大文本中看到!/ bin/sh。你可以使用反引號來實現內聯代碼(QWERTY上面的1鍵旁邊的撇號),所以如果我用''圍繞Hello World,我會得到'Hello World'。 – 2014-11-14 22:37:38

相關問題