我有一個docker容器內運行的cronjob,它檢查所有服務是否按預期運行。如果這的cronjob確定存在一個問題,我想停止泊塢窗容器(從內...)從裏面停止docker容器
不幸的是exit
只是停止我的cronjob腳本
我有一個docker容器內運行的cronjob,它檢查所有服務是否按預期運行。如果這的cronjob確定存在一個問題,我想停止泊塢窗容器(從內...)從裏面停止docker容器
不幸的是exit
只是停止我的cronjob腳本
基本上,你需要PID 1退出停止容器。
我最初認爲kill -s SIGKILL 1
會工作,但PID 1受保護,所以它不會。
正如@Thomasleveil所建議的那樣,您可以將代碼(如trap "exit" SIGINT SIGTERM
)添加到PID 1腳本中,這將意味着發送kill -s SIGINT 1
時進程將退出。我稍微喜歡這個方法(你直接殺死了子進程),因爲它給了父進程清理的機會,並且父進程應該能夠在沒有awk的情況下找到子進程的PID。
但是,如果您運行多個進程,則應考慮使用像supervisord或runit之類的東西。
我也想到了,但無法使其工作。你會有一個Dockerfile用於展示嗎? – Thomasleveil
呃,不是嗎?是否有錯誤訊息? cron作業運行的用戶是什麼? –
我嘗試了一個shell腳本,其內容是'kill -s SIGKILL 1' +無限循環/睡眠,並使docker在啓動時(以root身份)運行該shell腳本。所以我沒有cron,只是一個簡單的腳本運行;也許一個過程不能自殺?同樣'man 2 kill'似乎表明kill命令拒絕向進程發送信號,如果該進程沒有明確定義該特定信號的處理程序的話。 – Thomasleveil
我試圖殺死進程1,但沒有成功。
試試看@ zero323與shutdown -h now
的評論。它工作正常(對不起,我不能直接投票,因爲它不在答案列表中)。
這是最新的ubuntu鏡像中發生的事情: > root @ b968bf313300:/#shutdown -h now 無法連接到總線:沒有這樣的文件或目錄 未能與init守護進程交談。 它什麼也沒做。 –
'shutdown -h now'? – zero323
你的容器基於什麼形象? – Thomasleveil
這是從Ubuntu的:12.04 –