Ubuntu 服务器的 Chkconfig 替代方案?

Mar*_*ppi 145 server services

我已经非常习惯于在 Redhat/RHEL 平台上管理服务启动,chkconfig尽管这似乎不是 Debian/Ubuntu 的方式 - 如何在 Ubuntu 上更新系统服务的运行级别信息?

最终寻找等价物:

chkconfig --add <service>
chkconfig --level 345 <service> on
chkconfig --del <service>
Run Code Online (Sandbox Code Playgroud)

Ric*_*way 124

相当于chkconfigISupdate-rc.d

你寻求的等价物是

update-rc.d <service> defaults
update-rc.d <service> start 20 3 4 5
update-rc.d -f <service>  remove
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此有用页面或查看 man update-rc.d

  • “请注意,该程序是为在包维护者脚本中使用而设计的,因此,只有此类脚本所需的非常有限的功能。不鼓励系统管理员使用 update-rc.d 来管理运行级别。他们应该编辑链接直接或使用运行级别编辑器,例如 sysv-rc-conf 和 bum。” 从手册页:http://manpages.ubuntu.com/manpages/hardy/man8/update-rc.d.8.html (11认同)
  • update-rc.d *仅*用于打包脚本,而不是用于人类。它也适用于 Ubuntu 不使用的 init 脚本。Ubuntu 使用新贵。 (6认同)
  • 我接受此答案,因为更新的手册页已删除该警告。http://manpages.ubuntu.com/manpages/lucid/man8/update-rc.d.8.html (5认同)
  • 这仍然没有改变现在 Ubuntu 甚至不使用 SysV init 脚本并且 update-rc.d 仅适用于它们的事实。 (4认同)

小智 54

最好的替代恕我直言是 sysv-rc-conf 要安装只需要运行命令:

sudo apt-get install sysv-rc-conf
Run Code Online (Sandbox Code Playgroud)

安装后运行命令:

sudo sysv-rc-conf
Run Code Online (Sandbox Code Playgroud)

您可以选中或取消选中在任何执行级别启动服务的选项,甚至可以从此控制台停止或启动服务。它是一个必不可少的工具,可以永久地启用或禁用应用程序来引导您的 ubuntu 如果您需要快速更改,那么您可以使用 CLI 界面:

例如,在执行级别 3 和 5 停止 ssh:

sysv-rc-conf-off level 35 ssh
Run Code Online (Sandbox Code Playgroud)

Atd 在运行级别 2、3、4 和 5 中启动:

sysv-rc-conf on atd
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多:

man sysv-rc-conf
Run Code Online (Sandbox Code Playgroud)


mac*_*aco 10

目前,在稳定版本上没有等效的版本可以使用 Upstart 脚本执行操作。Jacob Peddicord 为他的 Google Summer of Code 项目编写了 jobservice(后端守护程序)和 jobs-admin(与之对话的 GTK+ GUI)。Lucid 包在他的 PPA 中。它们也存在于 Maverick 的 Universe 中。作业服务还没有命令行前端,只有作业管理员。


小智 10

尝试这个:

apt-get install chkconfig
Run Code Online (Sandbox Code Playgroud)

这有效,至少作为 Ubuntu 12.04 版本。

  • 不适用于 12.10 (6认同)
  • Ubuntu 14.04 上没有软件包。我们需要添加另一个来源吗? (2认同)

小智 5

让我们从零到目标 - 如何一步一步地做到这一点。

第 1 步:让我们编写一个 hello world

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

EOF
Run Code Online (Sandbox Code Playgroud)

第 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
Run Code Online (Sandbox Code Playgroud)

第 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
Run Code Online (Sandbox Code Playgroud)
  • 因此,在第 3 步中,系统在启动时会自动执行 server.py 作为守护进程,并使其易于自动化

希望它有所帮助。

  • +1:非常有用的答案,但我认为它附加了错误的问题。 (3认同)