Tôi có một dự án soạn thảo docker mà tôi muốn kiểm soát thông qua systemd. Để bắt đầu, tôi sẽ sử dụng một kịch bản trông như thế này:
description "Start/Stop server"
author "Jim Cortez"
start on filesystem and started docker
stop on runlevel [!2345]
respawn limit 3 240
pre-start script
# wait (if necessary) for our docker context to be accessible
while [ ! -f /projects/my_server/docker-compose.yml ]
do
sleep 1
done
/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
end script
script
sleepWhileAppIsUp(){
while docker ps | grep "$1" >/dev/null; do
sleep 2
done
}
sleepWhileAppIsUp "my_server"
end script
# stop docker container after the stop event has completed
post-stop script
if docker ps | grep my_server;
then
/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop
fi
end script
(ở trên thích nghi từ đây )
Tuy nhiên, tôi hiện đang chạy trên một máy chủ docker chạy Ubuntu 15.04, đã chuyển sang systemd. Làm thế nào tôi có thể làm như trên như một kịch bản dịch vụ systemd? Chỉ cần khởi chạy trình nền soạn thảo docker sẽ không cho phép systemd theo dõi và khởi động lại trong trường hợp thất bại.
Đây là những gì tôi có cho đến nay:
[Unit]
Description=My Server container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop
[Install]
WantedBy=local.target