diff --git a/files/build_templates/bgp.service.j2 b/files/build_templates/bgp.service.j2 index 7fa3c0eb115..c7ba8b8a5f5 100644 --- a/files/build_templates/bgp.service.j2 +++ b/files/build_templates/bgp.service.j2 @@ -5,7 +5,8 @@ After=database.service [Service] User={{ sonicadmin_user }} -ExecStart=/usr/bin/{{docker_container_name}}.sh start +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh attach ExecStop=/usr/bin/{{docker_container_name}}.sh stop [Install] diff --git a/files/build_templates/database.service.j2 b/files/build_templates/database.service.j2 index fd4f34435e6..c353653e456 100644 --- a/files/build_templates/database.service.j2 +++ b/files/build_templates/database.service.j2 @@ -5,7 +5,8 @@ After=docker.service [Service] User={{ sonicadmin_user }} -ExecStart=/usr/bin/{{docker_container_name}}.sh start +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh attach ExecStop=/usr/bin/{{docker_container_name}}.sh stop [Install] diff --git a/files/build_templates/dhcp_relay.service.j2 b/files/build_templates/dhcp_relay.service.j2 index 95d66c605f8..c0e993eec06 100644 --- a/files/build_templates/dhcp_relay.service.j2 +++ b/files/build_templates/dhcp_relay.service.j2 @@ -5,7 +5,8 @@ After=interfaces-config.service [Service] User={{ sonicadmin_user }} -ExecStart=/usr/bin/{{ docker_container_name }}.sh start +ExecStartPre=/usr/bin/{{ docker_container_name }}.sh start +ExecStart=/usr/bin/{{ docker_container_name }}.sh attach ExecStop=/usr/bin/{{ docker_container_name }}.sh stop [Install] diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index be62b435155..10679765eb3 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -7,25 +7,29 @@ HWSKU=`sonic-cfggen -m /etc/sonic/minigraph.xml -v minigraph_hwsku` start() { docker inspect --type container {{docker_container_name}} &>/dev/null if [ "$?" -eq "0" ]; then - docker start -a {{docker_container_name}} + docker start {{docker_container_name}} else - docker run {{docker_image_run_opt}} \ + docker run -d {{docker_image_run_opt}} \ -v /usr/share/sonic/device/$PLATFORM:/usr/share/sonic/platform:ro \ -v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \ --name={{docker_container_name}} {{docker_image_name}} fi } +attach() { + docker attach --no-stdin {{docker_container_name}} +} + stop() { docker stop {{docker_container_name}} } case "$1" in - start|stop) + start|stop|attach) $1 ;; *) - echo "Usage: $0 {start|stop}" + echo "Usage: $0 {start|stop|attach}" exit 1 ;; esac diff --git a/files/build_templates/lldp.service.j2 b/files/build_templates/lldp.service.j2 index f66e9d682af..1ddda15a49c 100644 --- a/files/build_templates/lldp.service.j2 +++ b/files/build_templates/lldp.service.j2 @@ -5,7 +5,8 @@ After=database.service [Service] User={{ sonicadmin_user }} -ExecStart=/usr/bin/{{docker_container_name}}.sh start +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh attach ExecStop=/usr/bin/{{docker_container_name}}.sh stop [Install] diff --git a/files/build_templates/pmon.service.j2 b/files/build_templates/pmon.service.j2 index d50f5be628d..9f1a0298240 100644 --- a/files/build_templates/pmon.service.j2 +++ b/files/build_templates/pmon.service.j2 @@ -5,7 +5,8 @@ After=database.service [Service] User={{ sonicadmin_user }} -ExecStart=/usr/bin/{{docker_container_name}}.sh start +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh attach ExecStop=/usr/bin/{{docker_container_name}}.sh stop [Install] diff --git a/files/build_templates/snmp.service.j2 b/files/build_templates/snmp.service.j2 index 3744c586896..493d6bd8fcf 100644 --- a/files/build_templates/snmp.service.j2 +++ b/files/build_templates/snmp.service.j2 @@ -5,7 +5,8 @@ After=database.service [Service] User={{ sonicadmin_user }} -ExecStart=/usr/bin/{{docker_container_name}}.sh start +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh attach ExecStop=/usr/bin/{{docker_container_name}}.sh stop [Install] diff --git a/files/build_templates/swss.service.j2 b/files/build_templates/swss.service.j2 index 3ec8161fa00..7466e8c1457 100644 --- a/files/build_templates/swss.service.j2 +++ b/files/build_templates/swss.service.j2 @@ -20,9 +20,9 @@ ExecStartPre=-/etc/init.d/xpnet.sh stop ExecStartPre=/etc/init.d/xpnet.sh start {% endif %} -# systemd allows only one parent process within service, -# so we spawn both dockers from single bash parent -ExecStart=/bin/bash -c "/usr/bin/{{docker_container_name}}.sh start & /usr/bin/syncd.sh start & wait -n 0" +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStartPre=/usr/bin/syncd.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh attach ExecStop=/usr/bin/{{docker_container_name}}.sh stop ExecStopPost=/usr/bin/syncd.sh stop diff --git a/files/build_templates/teamd.service.j2 b/files/build_templates/teamd.service.j2 index 49ecb640d89..e291a39b387 100644 --- a/files/build_templates/teamd.service.j2 +++ b/files/build_templates/teamd.service.j2 @@ -5,7 +5,8 @@ After=database.service [Service] User={{ sonicadmin_user }} -ExecStart=/usr/bin/{{docker_container_name}}.sh start +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh attach ExecStop=/usr/bin/{{docker_container_name}}.sh stop [Install]