标题几乎概括了一切。
如何将我的服务器应用程序的 startup.sh 和 shutdown.sh 添加到 Debian 操作系统的启动和关闭序列中?
答案1
在 Debian 上,服务和应用程序的启动和关闭脚本应该放入/etc/init.d/
。
Debian 提供了一个示例脚本/etc/init.d/skeleton
,您可以根据自己的特定应用程序的喜好对其进行修改。
一旦到位,请拨打:
# update-rc.d YOURAPP defaults
让 Debian/etc/rc?.d/
为您添加符号链接。
如果您更喜欢菜单或图形界面,请查看sysv-rc-conf
或ksysv
包。
答案2
自 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
:
首先要看的手册页:
man systemd.unit
-- 关于一般单元文件
man systemd.service
-- 关于服务单元文件,例如守护进程和单运行程序。
man systemctl
-- 命令行用户界面
man journalctl
-- 查看 systemd 所做工作的日志
man systemd
-- 关于 init 程序本身
还有各种其他类型的单元文件,例如
man systemd.target
- 适用于群组和常见同步目标。
一旦您消化了上述基础知识,就man -k systemd
可以深入挖掘其他相关的手册页。
无论您在 Debian 上做什么不要使用任何这些:
update-rc.d
--安装并删除 System-V 风格的初始化脚本链接sysv-rc-conf
-- SysV 的运行级别配置,如初始化脚本链接runlevel
-- 打印上一个和当前的 SysV 运行级别BUM
--乙奥特乌页米anager - 图形运行级别编辑器systemadm
-- systemd 系统和服务管理器的图形前端
(顺便说一句,作者通过电子邮件告诉我它现在太破了。)
一个例子:
此单元文件在我启动时启动NoIP.com守护进程,在我关机时将其关闭。
此守护程序会不时发送我当前的 IP 地址来更新我的 DDNS(德动态的DNS(德奥马因否英文年代我使用我的域名(即“服务器”)提供商的数据库,这样,无论我的域名传输到哪里,它都指向我的计算机。
该单元文件位于我的系统中的以下设置文件中:/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
答案3
您可以从调用脚本/etc/rc.local,在以下行之前出口 0
至于关闭你的应用程序,我建议在/etc/rc0.d。您需要用大写字母命名钾,然后是一个 2 位数字,指定这些脚本的运行顺序,然后是一个名称。它将使用参数“stop”调用,但对于简单的停止脚本,您可以忽略它。
答案4
最简单的方法是修改现有的脚本,在我的系统上运行,用于声音:)
- 启动,修改
/etc/init.d/rc.local
,在文件末尾添加你的 sh,之前:(它将在登录“屏幕”之前执行它) - 关机,修改
/etc/init.d/halt
,在文件开头添加 sh,就在初始注释之后(它将在实际关机命令之前执行,该命令由此脚本文件调用 - 重启,与关机相同,但在
/etc/init.d/reboot