Задание запуска экземпляра при перезагрузке системы

Согласно wikipedia, Ubuntu по большей части является лицензированным GPL: Единственными исключениями являются некоторые проприетарные аппаратные драйверы. [24] Основной лицензией является GNU General Public License (GNU GPL), которая вместе с GNU Lesser General Public License (GNU LGPL) прямо заявляет, что пользователи могут свободно запускать, копировать, распространять, изучать, изменять, разрабатывать и совершенствовать программного обеспечения. С другой стороны, есть также проприетарное программное обеспечение, которое может работать на Ubuntu.

Источник: http://en.wikipedia.org/wiki/Ubuntu_(operating_system)#Features

Существуют определенные пакеты, которые не включены (например, ограниченные драйверы), которые предоставляют

На официальном http://en.wikipedia.org/wiki/Ubuntu_ (operating_system) #Features вы также можете найти более подробную информацию по этой теме.

Он также явно указывает, что существует 4 типа лицензий, предлагаемых в пакетах ubuntu:

Единственными исключениями являются некоторые проприетарные аппаратные драйверы. [24] Основной лицензией является GNU General Public License (GNU GPL), которая вместе с GNU Lesser General Public License (GNU LGPL) прямо заявляет, что пользователи могут свободно запускать, копировать, распространять, изучать, изменять, разрабатывать и совершенствовать программного обеспечения. С другой стороны, есть также запатентованное программное обеспечение, которое может работать на Ubuntu.

3
задан 4 February 2014 в 11:00

2 ответа

Вы можете сохранить список пользователей в файл (в этом примере user-sync.list). Чтобы восстановить пользовательские сценарии, вы можете использовать цикл for в сценарии bash, который запускается пользователем root при загрузке. Где ваш скрипт инициализации называется user-sync:

#!/bin/sh
# /root/restore-user-sync.sh
for user in `cat user-sync.list`; do start user-sync user=$user; done

Добавьте его в crontab от имени root:

$ crontab -e

В файле cron:

@reboot /root/restore-user-sync.sh

Ведение списка активных пользователей является наиболее важной частью. Вы можете сделать это с помощью сценария Python или как часть сценария Upstart:

# /etc/init/user-sync.conf

start on runlevel [2345]
stop on runlevel [06]

normal exit 0

respawn
respawn limit 5 300
instance $user

chdir /home/talha/syncservice/

pre-start script
    # if $user doesn't already exist in list, add $user to list
    if ! grep $user user-sync.list; then echo $user >> user-sync.list; fi
end script

script
   exec python sync.py $user
end script

pre-stop script
    # remove line(s) from list that exactly match $user
    sed -i "/\b$user\b/d" user-sync.list
end script

Вы можете заменить $ USER (который автоматически определяется как текущее имя пользователя) на $ пользователь, в противном случае при вызове сценария upstart вам нужно будет передать имя пользователя в качестве параметра:

sudo start user-sync user=myusername
0
ответ дан 4 February 2014 в 11:00

Я бы определенно отказался от попадания под капот выскочки. Вы можете сделать это по-другому.

В разделе поваренной книги о строфе экземпляра приведен пример того, как делать такие вещи. Я делаю что-то подобное с несколькими экземплярами PostgreSQL; см. этот ответ.

Основная идея здесь - создать то, что я называю заданием «движок пони», которое запускает все задания вашего экземпляра. В вашем случае вы можете сделать так, чтобы он перебирал подкаталоги /home, или содержал отдельный файл conf, в котором перечислены пользователи, для которых вы хотите, чтобы служба работала. Для каждого пользователя запустите экземпляр sync.py.

Вы правы, что start on / stop on бесполезны в задании экземпляра. Переместите его в задание «двигатель пони».

К сожалению, сейчас у меня нет доступа к Linux-системе, но см. Вышеупомянутый ответ для примеров.

0
ответ дан 4 February 2014 в 11:00

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

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