2016-02-25 14 views
1

我在/etc/init.d已經這個搬運工SH服務腳本的Debain 8機器上:泊塢窗 - SH服務腳本不採取選項

#!/bin/sh 
set -e 

### BEGIN INIT INFO 
# Provides:   docker 
# Required-Start:  $syslog $remote_fs 
# Required-Stop:  $syslog $remote_fs 
# Should-Start:  cgroupfs-mount cgroup-lite 
# Should-Stop:  cgroupfs-mount cgroup-lite 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: Create lightweight, portable, self-sufficient containers. 
# Description: 
# Docker is an open-source project to easily create lightweight, portable, 
# self-sufficient containers from any application. The same container that a 
# developer builds and tests on a laptop can run at scale, in production, on 
# VMs, bare metal, OpenStack clusters, public clouds and more. 
### END INIT INFO 

export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin 

BASE=docker 

# modify these in /etc/default/$BASE (/etc/default/docker) 
DOCKER=/usr/bin/$BASE 
# This is the pid file managed by docker itself 
DOCKER_PIDFILE=/var/run/$BASE.pid 
# This is the pid file created/managed by start-stop-daemon 
DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid 
DOCKER_LOGFILE=/var/log/$BASE.log 
DOCKER_DESC="Docker" 
DOCKER_OPTS="--insecure-registry 127.0.0.1:9000" 

# Get lsb functions 
. /lib/lsb/init-functions 

if [ -f /etc/default/$BASE ]; then 
    . /etc/default/$BASE 
fi 

# Check docker is present 
if [ ! -x $DOCKER ]; then 
    log_failure_msg "$DOCKER not present or not executable" 
    exit 1 
fi 

check_init() { 
    # see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it directly) 
    if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then   
       log_failure_msg "$DOCKER_DESC is managed via upstart, try using service $BASE $1" 
       exit 1 
     fi 
} 

fail_unless_root() { 
    if [ "$(id -u)" != '0' ]; then 
     log_failure_msg "$DOCKER_DESC must be run as root" 
     exit 1 
    fi 
} 

cgroupfs_mount() { 
    # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount 
    if grep -v '^#' /etc/fstab | grep -q cgroup \ 
     || [ ! -e /proc/cgroups ] \ 
     || [ ! -d /sys/fs/cgroup ]; then 
     return 
    fi 
    if ! mountpoint -q /sys/fs/cgroup; then 
     mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup 
    fi 
    (
     cd /sys/fs/cgroup 
     for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do 
      mkdir -p $sys 
      if ! mountpoint -q $sys; then 
       if ! mount -n -t cgroup -o $sys cgroup $sys; then 
        rmdir $sys || true 
       fi 
      fi 
     done 
    ) 
} 
echo -n "$1" 

case "$1" in 
    start) 
     echo "start" 
     check_init 

     fail_unless_root 

     cgroupfs_mount 

     touch "$DOCKER_LOGFILE" 
     chgrp docker "$DOCKER_LOGFILE" 

     ulimit -n 1048576 
     if [ "$BASH" ]; then 
      ulimit -u 1048576 
     else 
      ulimit -p 1048576 
     fi 

     echo $DOCKER_OPTS 
     log_begin_msg "Starting $DOCKER_DESC: $BASE" 
     start-stop-daemon --start --background \ 
      --no-close \ 
      --exec "$DOCKER" \ 
      --pidfile "$DOCKER_SSD_PIDFILE" \ 
      --make-pidfile \ 
      -- \ 
       daemon -p "$DOCKER_PIDFILE" \ 
       $DOCKER_OPTS \ 
        >> "$DOCKER_LOGFILE" 2>&1 
     log_end_msg $? 
     ;; 

    stop) 
     check_init 
     fail_unless_root 
     log_begin_msg "Stopping $DOCKER_DESC: $BASE" 
     start-stop-daemon --stop --pidfile "$DOCKER_SSD_PIDFILE" --retry 10 
     log_end_msg $? 
     ;; 

    restart) 
     check_init 
     fail_unless_root 
     docker_pid=`cat "$DOCKER_SSD_PIDFILE" 2>/dev/null` 
     [ -n "$docker_pid" ] \ 
      && ps -p $docker_pid > /dev/null 2>&1 \ 
      && $0 stop 
     $0 start 
     ;; 

    force-reload) 
     check_init 
     fail_unless_root 
     $0 restart 
     ;; 

    status) 
     echo "Prova" 
     check_init 
     status_of_proc -p "$DOCKER_SSD_PIDFILE" "$DOCKER" "$DOCKER_DESC" 
     echo "a" 
     ;; 
    statu) 
       echo "Prova" 
       check_init 
       status_of_proc -p "$DOCKER_SSD_PIDFILE" "$DOCKER" "$DOCKER_DESC" 
       echo "a" 
       ;; 
    *) 
     echo "Usage: service docker {start|stop|restart|status} PIPPO" 
     exit 1 
     ;; 
esac 

與此問題是,它不通過DOCKER_OPTS值到start部分中的start-stop-daemon部分(或者至少它們不起作用,並且不會出現在ps aux輸出中的結果進程的命令中)。

我們已經嘗試將DOCKER_OPTS直接放在腳本中,並且讓它在默認配置文件中被讀取,但結果是相同的,這些選項不會產生任何效果。

如果我們試圖用start-stop-daemon直接從終端啓動相同的選項,它的工作就很好。

這可能是什麼原因?

在一個側面說明,我們也嘗試用腳本玩了一下,發現這個strage情況:

我們提出所謂statu狀態部分的副本,那麼我們所說的展臺,他們給我們不同的結果。

狀態:

● docker.service - Docker Application Container Engine 
    Loaded: loaded (/lib/systemd/system/docker.service; enabled) 
    Active: active (running) since Thu 2016-02-25 12:40:43 CET; 4min 35s ago 
    Docs: https://docs.docker.com 

statu: [FAIL [...]泊塢窗沒有運行...失敗!

作爲代碼相同,這是相當驚喜!?爲什麼這樣?

回答

0

Systemd不使用/etc/init.d中的腳本。從你的輸出中,它使用/lib/systemd/system/docker.service中的軟件包默認配置。如果您想進行更改:

# make a local copy, /lib/systemd can be overwritten on an application upgrade 
cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service 

# edit /etc/systemd/system/docker.service 

systemctl daemon-reload # updates systemd from files on the disk 
systemctl restart docker # restart the service with your changes