如何在Debian中将脚本添加到启动和关闭?


Answers:


15

在Debian上,服务和应用程序的启动和关闭脚本应该放在中/etc/init.d/

Debian提供了一个示例脚本/etc/init.d/skeleton,您可以根据自己的特定应用程序对其进行修改。

放置到位后,请致电:

# update-rc.d YOURAPP defaults

要让Debian /etc/rc?.d/为您添加符号链接。

如果您喜欢菜单或图形界面,请查看sysv-rc-confksysv包。


4

您可以从/etc/rc.local调用脚本,在退出0的行之前

至于关闭您的应用程序,我建议将脚本放在/etc/rc0.d中。您需要使用大写字母K命名,然后使用2位数字(用于指定这些脚本的运行顺序)和名称来命名。将使用参数“ stop”来调用它,但是对于简单的stop脚本,您可以忽略它。


无论如何,当您已经摆弄/etc/rcX.d时,为什么还要使用rc.local?
womble

rc.local是简单启动内容的合适地方-不需要处理启动/停止参数等。但是它没有关闭进程的能力。rc0.d的东西有点hack。
布伦特

3

对于启动,看看这个

对于关机,请创建一个链接/将脚本复制到/etc/rcX.d文件夹之一,其中X是您希望其执行的运行级别。我相信Debian的关机运行级别为0。


这是我需要的关机信息。谢谢你,@ squillman。
哈珀维尔,2015年

1

最简单的方法是修改现有脚本,在我的系统中运行,用于声音:)

  • 启动,修改/etc/init.d/rc.local,在文件末尾,在:之前添加sh(它将在登录“屏幕”之前立即执行)
  • 关闭,修改/etc/init.d/halt,然后在文件的开头,在初始注释之后添加sh(它将在实际关闭命令之前执行,此脚本文件将调用该命令)
  • 重新启动,与关机相同,但是在 /etc/init.d/reboot

1

自Debian Jessie以来,旧init程序已被替换为systemd

自己检查一下。运行:ls -l /sbin/init查看其指向的内容。如今,它指向systemd/sbin/init -> /lib/systemd/systemd),这是一个更新更好的初始化程序。


因此,此处选择的答案和其他答案已经过时了!!!


*尽管您仍然可以使用System-V工具以旧方式安装脚本,但从总体上来说,这不是一个好主意。

man systemd.service 说:*

如果以特定名称请求服务,但未找到任何单元配置文件,则systemd将查找具有相同名称的SysV初始化脚本...并根据该脚本动态创建服务单元。这对于与SysV兼容很有用。请注意,此兼容性非常全面,但并非100%。


对于较新的Debian系统(例如Jessie,Stretch,Buster等)

它比您想象的要容易。(-:

这是安装启动或关闭程序的新的首选方法。

随着systemd你首先要创建一个单元文件。单位文件主要是声明,而不是代码。

然后,您将使用systemctl命令启用启动该单元。

systemd为您完成了很多工作,例如,使某个关键程序崩溃或被杀死时,它很容易自动重新启动。它还会在默认情况下在何时何地关闭程序,而无需您进行任何额外的工作。


systemd在这里开始了解:

从Debian的其他地方


手册页开始于:

man systemd.unit -关于一般的单元文件
man systemd.service -关于服务单元文件,例如守护程序和单次运行程序。

man systemctl -命令行用户界面
man journalctl-查看systemd完成的日志

man systemd -关于初始化程序本身


还有许多其他类型的单位文件,例如

man systemd.target -适用于群组和共同的同步目标。

掌握man -k systemd了以上基础知识之后,请深入研究以找到其他相关的手册页。



无论您做什么,在Debian上都不要使用以下任何一种方法

  • update-rc.d -安装和删除System-V样式的初始化脚本链接
  • sysv-rc-conf -SysV的运行级别配置,例如初始化脚本链接
  • runlevel -打印以前和当前的SysV运行级别
  • BUM- OOT ü p 中号 anager -图形运行级别编辑器
  • systemadm-systemd系统和服务管理器的图形前端
    (顺便说一句,作者通过电子邮件告诉我,现在太破损了。)


一个例子:

当我启动时,此单位文件启动NoIP.com守护程序,而当我关闭时,将其关闭。

这个守护进程,不时,把我目前的IP地址来更新我的DDNS(d ynamic DNSd omain ñ AME 小号 erver))提供的数据的基础上,从而保持我的域名指向我的电脑无论它前往。

该单位文件位于我的系统上的以下设置文件中: /etc/systemd/system/noip2.service

这是单位文件中的内容:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

手动运行单位文件(例如,用于测试):

  • 开始使用$ sudo systemctl start noip2
  • 重新启动$ sudo systemctl restart noip2
  • 停止使用$ sudo systemctl stop noip2

配置系统以在启动或关闭时自动运行单元文件:

  • 开始使用$ sudo systemctl enable noip2
  • 最终与一起使用$ sudo systemctl disable noip2

查看日志

  • $ sudo journalctl -u noip2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.