выскочка несколько параметров

Таким образом, я работаю над новомодным процессом и требуемый, чтобы знать, мог ли я передать в нескольких параметрах

my-upstart-service restart PARM1=foo PARM2=bar PARM3=hello

Вот отчасти, что я имел в виду

description "Multi Parm"

env USER=BLARG

start on startup
stop on shutdown

respawn

instance $PARM1
instance $PARM2
instance $PARM3

env P1=${PARM1}
env P2=${PARM2}
env P3=${PARM3}

script
    exec sudo -u $USER sh -c "$P1/$P2/$P3.sh"
end script

Я могу сделать что-то вроде этого?

2
задан 30 August 2014 в 20:19

2 ответа

Да, возможно, определяют несколько env переменная и, чем переопределяет их из командной строки.

Например:

  description "Multi Parm"

  env USER=BLARG

  start on startup
  stop on shutdown

  env PARM1=foo
  env PARM2=bar
  env PARM3=hello

  script
     exec sudo -u $USER sh -c "/$PARM1/$USER/PARM2/$PARM3.sh"
  end script

Чем Вы может запустить Ваш сервис:

  initctl start your-service PARM1=home PARM2=bin PARM3=yourScript

Неясно для меня, как Вы использовали бы строку файла конфигурации экземпляра. Если необходимо запустить несколько экземпляр задания, Вы могли бы изменить этот пример:

  description "Multi Parm"

  env USER=BLARG

  start on startup
  stop on shutdown

  respawn

  instance $PARM1
  script
     exec sudo -u $USER sh -c "/home/$USER/bin/$PARM1.sh"
  end script

Таким образом, можно выполнить его многократно с другим значением $PARM1:

  initctl start your-service PARM1=my-first-script
  initctl start your-service PARM1=my-second-script

Смотрите на 6.15.2 Других Примеров Экземпляра существует пример о том, как определить a worker задание и как выполнить его многократно более другой экземпляр от workers задание.

ОБНОВЛЕНИЕ Здесь является примером, протестированным на lubuntu 12.04.

Сначала определите simpleInstanceJob.conf задание, которое просто запускает Ваш скрипт с данными параметрами. Это - задание без start on и stop on строка файла конфигурации, таким образом, это не, запускает/заходит выскочку init процесс.

# SimpleInstanceJob - 
#
# This service runs for ever and print number and arguments
description "Run single job instance"
instance $ENVIRONMENT/$DRIVER/$ALGORITHM
console log
respawn
script
  exec  python /home/caterina/tmp/upstart/test.py $ENVIRONMENT $DRIVER $ALGORITHM 
end script

Вставьте его /etc/init и протестируйте его с:

sudo start simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar 

Использовать initctl просмотреть задание состояния:

initctl list | grep simpleInstanceJob

это произведет:

simpleInstanceJob (foo/bar/fooBar) start/running, process 3828

и test.py вывод будет сохранен в /var/log/upstart/simpleInstanceJob-foo_bar_fooBar.log

Использование:

sudo stop simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar 

остановиться/уничтожить"foo/bar/fooBar"экземпляр simpleInstanceJob.

Чтобы к выполнениям несколько инстанцируют simpleInstanceJob, создайте a launcherJobs.conf:

# laucherJobs - 
#
# This service runs three instance of simpleInstanceJob
# starts on runlevel.
description "laucherJobs"
start on runlevel [2345]

stop on runlevel [016]
console log

pre-start script

    start simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar
    start simpleInstanceJob ENVIRONMENT=foo1 DRIVER=bar1 ALGORITHM=fooBar1
    start simpleInstanceJob ENVIRONMENT=foo2 DRIVER=bar2 ALGORITHM=fooBar2

end script

post-stop script
    for inst in `initctl list|grep "^simpleInstanceJob "|awk '{print $2}'|tr -d ')'|tr -d '('`
    do
       environment=`echo $inst | awk -F "/" '{print $1}'`
       driver=`echo $inst | awk -F "/" '{print $2}'`        
       algorithm=`echo $inst | awk -F "/" '{print $3}'`
       stop simpleInstanceJob ENVIRONMENT=$environment DRIVER=$driver ALGORITHM=$algorithm 
    done
end script

Это "основное" задание не имеет никакого основного должностного лица или раздела сценария, оно будет работать (без pid) в течение какого-то времени что "ведомое устройство" или дети (отдельный "simpleInstanceJob") выполненные экземпляры задания.

Вставьте его /etc/init и протестируйте его с:

sudo start laucherJobs

Это запустит три экземпляра simpleInstanceJob:

initctl list | grep Job

произведет:

simpleInstanceJob (foo/bar/fooBar) start/running, process 3745
simpleInstanceJob (foo2/bar2/fooBar2) start/running, process 3749
simpleInstanceJob (foo1/bar1/fooBar1) start/running, process 3747
launcherJobs start/running

Наконец остановить весь процесс:

sudo stop laucherJobs

Надежда это полезно для решения проблемы.

5
ответ дан 7 October 2019 в 04:29

Можно сделать это:

start on startup
stop on runlevel [016]

instance $PARM1/$PARM2/$PARM3

setuid BLARG

respawn
exec ${UPSTART_INSTANCE}.sh
1
ответ дан 7 October 2019 в 04:29

Другие вопросы по тегам:

Похожие вопросы: