Альтернатива Chkconfig для Ubuntu Server?


144

Я очень привык управлять запуском сервисов на платформах Redhat / RHEL, chkconfigхотя это не похоже на способ Debian / Ubuntu - Как мне обновить информацию об уровне выполнения для системных сервисов в Ubuntu?

В конечном итоге ищет эквиваленты:

chkconfig --add <service>
chkconfig --level 345 <service> on
chkconfig --del <service>

1
Кстати, вы можете apt-get install chkconfigпакет на Ubuntu также. Однако с годами он не работает, следующая символическая ссылка заставит его работать (несколько):ln -s /usr/lib/insserv/insserv /sbin/insserv
eckes

Ответы:


125

Эквивалент chkconfigявляетсяupdate-rc.d

Эквиваленты, которые вы ищете

update-rc.d <service> defaults
update-rc.d <service> start 20 3 4 5
update-rc.d -f <service>  remove

Смотрите эту полезную страницу для получения дополнительной информации или посмотрите man update-rc.d


5
update-rc.d предназначен только для использования в сценариях упаковки, а не людьми. Это также для сценариев инициализации, которые Ubuntu не использует. Ubuntu использует Upstart.
Мако

11
«Обратите внимание, что эта программа была разработана для использования в сценариях сопровождающего пакета и, соответственно, имеет только очень ограниченную функциональность, необходимую для таких сценариев. Системным администраторам не рекомендуется использовать update-rc.d для управления уровнями выполнения. Они должны редактировать ссылки. напрямую или используйте вместо этого редакторы уровня запуска, такие как sysv-rc-conf и bum. " С man- страницы
Мако,

4
Я принимаю этот ответ, потому что обновленные справочные страницы удалили это предупреждение. manpages.ubuntu.com/manpages/lucid/man8/update-rc.d.8.html
Марко Чеппи

4
Что по-прежнему не меняет того факта, что в настоящее время Ubuntu даже не использует сценарии инициализации SysV, а update-rc.d предназначен только для них.
Мак

1
До сих пор используются некоторые скрипты sysv, и особенно они работают и с upstart. Поэтому, если у вас не было времени на конвертацию скрипта, вы все равно можете использовать его таким образом.
Eckes

53

Лучший вариант IMHO - это sysv-rc-conf. Для установки достаточно запустить команду:

sudo apt-get install sysv-rc-conf

После установки запустите команду:

sudo sysv-rc-conf

Вы можете установить или снять флажки для запуска службы на любом уровне выполнения и даже можете остановить или запустить службы из этой консоли. Это незаменимый инструмент для включения или отключения приложений на постоянной основе для загрузки вашей Ubuntu. Если вам нужно быстрое изменение, тогда вы можете использовать интерфейс CLI:

Например, чтобы остановить ssh на уровнях 3 и 5 выполнения:

sysv-rc-conf-off level 35 ssh

Atd для запуска на уровнях запуска 2,3,4 и 5:

sysv-rc-conf on atd

Если вы хотите узнать больше:

man sysv-rc-conf

Это именно то, что мне было нужно, за исключением того, что я сделал sysv-rc-conf apache2 onи sysv-rc-conf apache2 offт. Д.
Адам К Дин

Это работает для меня по сравнению с update-rc.d, который искал программные скрипты в каталоге /etc/init.d/, где не установлены некоторые программы, такие как vsftpd.
Дэвид Оквий

Работал для меня в Ubuntu 14.04
Хашид Хамид

У вас есть опечатка: sysv-rc-conf-off level 35 sshдолжно бытьsysv-rc-conf --level 35 ssh off
Slam

Проверено работает на Ubuntu 16.04LTS , где update-rc.dнет.
Сопалахо де Арриерес

10

На данный момент нет стабильного релиза для работы со сценариями Upstart. Джейкоб Педдикорд написал jobservice (backend daemon) и jobs-admin (GTK + GUI, который говорит с ним) для своего проекта Google Summer of Code. Пакеты Lucid находятся в его PPA . Они также существуют во Вселенной в Maverick. Для jobservice пока нет интерфейса командной строки, только jobs-admin.


10

Попробуй это:

apt-get install chkconfig

Это работает, по крайней мере, как выпуск Ubuntu 12.04.


6
Не работает с 12.10
эксперт

иметь 12.04, и apt-get install chkconfig выдает: «E: пакет 'chkconfig' не имеет кандидата на установку». Что находится в вашем файле /etc/apt/sources.list?
Джон Литтл

Похоже, что последний был опубликован для точного: 12.04: 1.0-79.1-2 0 в http://us.archive.ubuntu.com/ubuntu/ precise/universe i386 Packages. Некоторые исправления никогда не превращались в пакет.
Eckes

2
Нет пакета на Ubuntu 14.04. Нужно ли добавить еще один источник?
Хашид Хамид

5

Пройдемся от нуля до цели - как сделать это шаг за шагом.

Шаг 1: давайте напишем привет мир

cat >> /var/tmp/python/server.py <<\EOF
#/usr/bin/python
import time
while True:
  print "hello> YES Bello"
  time.sleep(30)

EOF

Шаг 2: давайте сделаем наше приложение hello world server.py автоматизированным

cat >> /var/tmp/myserver.sh <<\EOF
#!/bin/sh
script='/var/tmp/python/server.py'
export DISPLAY=:0.0 && /usr/bin/python $script &

EOF
chmod +x /var/tmp/myserver.sh

cat >> /etc/init.d/myserver <<\EOF

#! /bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/var/tmp/myserver.sh
PIDFILE=/var/run/myserver.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in
  start)
     log_daemon_msg "Starting feedparser"
     start_daemon -p $PIDFILE $DAEMON
     log_end_msg $?
   ;;
  stop)
     log_daemon_msg "Stopping feedparser"
     killproc -p $PIDFILE $DAEMON
     PID=`ps x |grep server.py | head -1 | awk '{print $1}'`
     kill -9 $PID       
     log_end_msg $?
   ;;
  force-reload|restart)
     $0 stop
     $0 start
   ;;
  status)
     status_of_proc -p $PIDFILE $DAEMON atd && exit 0 || exit $?
   ;;
 *)
   echo "Usage: /etc/init.d/atd {start|stop|restart|force-reload|status}"
   exit 1
  ;;
esac

exit 0


EOF
chmod +x /etc/init.d/myserver
chmod -R 777 /etc/init.d/myserver

Шаг 3:

$ update-rc.d myserver defaults
update-rc.d: warning: /etc/init.d/myserver missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
 Adding system startup for /etc/init.d/myserver ...
   /etc/rc0.d/K20myserver -> ../init.d/myserver
   /etc/rc1.d/K20myserver -> ../init.d/myserver
   /etc/rc6.d/K20myserver -> ../init.d/myserver
   /etc/rc2.d/S20myserver -> ../init.d/myserver
   /etc/rc3.d/S20myserver -> ../init.d/myserver
   /etc/rc4.d/S20myserver -> ../init.d/myserver
   /etc/rc5.d/S20myserver -> ../init.d/myserver
  • Таким образом, на шаге 3 система при загрузке автоматически запустит server.py как демон и упростит автоматизацию.

Надеюсь, это помогло.


2
+1: очень полезный ответ, но я думаю, что к нему прикреплен неправильный вопрос.
Кларис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.