我试图在启动/启动时启动 Shell 脚本 我尝试编辑 /etc/rc.local 文件,但它不起作用
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/root/ark/startup.sh #Added
exit 0
它应该启动一个脚本,该脚本本身就像一个魅力。(它启动一个屏幕会话......)
我可以使用任何帮助或其他方法来实现这一目标吗?
答案1
把...忘了吧rc.local
。
作为我说的是CentOS 7:
您使用的是 Debian 8。您有 systemd。 /etc/rc.local
是 systemd 中的双重向后兼容机制,因为它是一个向后兼容机制,而该机制本身就是 van Smoorenburg System 5rc
克隆中的兼容机制。
正如下面超链接的 AskUbuntu 问题中的混乱所示,使用/etc/rc.local
可能会出现严重错误。在其他地方,人们对 systemd 的运行rc.local
方式、引导程序中的相同位置与他们习惯的运行方式不同这一事实感到惊讶。其他人感到惊讶的是,他们在rc.local
期待旧的做事方式时所建立的东西却被新udev
规则、NetworkManager、、、systemd-logind
或systemd-resolved
各种“套件”之类的东西完全破坏了。
把...忘了吧rc.local
。这不是要走的路。您拥有 Debian 8。因此,请创建一个适当的 systemd 服务单元,并且不要从两个级别的向后兼容性相距的点开始。 (在 Ubuntu 上,它被删除了 3 次,rc
随后的System 5克隆就变成了它自己两次十多年前被新贵取代,然后被 systemd 取代。)
不要通过编写startup.sh
脚本然后从 systemd 服务单元调用该脚本来开始使用 systemd 运行此过程。这个想法很快就会导致systemd 恐怖屋领土。创建一个服务单元,尽可能多地直接描述流程设置和执行。仅当您遇到包装器 shell 脚本的限制时才使用它。并确保你的包装 shell 脚本至少用于exec
覆盖最终的守护程序。
你没有说那项服务是什么。您提到使用screen
,但这经常被滥用为穷人的守护进程主管,并且很可能会被滥用不是在以下环境下运行服务的方式实际的服务经理。我确实在那里看到了“方舟”这个词,它与潜在的滥用一起screen
让人想起两件事:
- 迁移到 systemd 的第一条规则。
- 这条规则再次得到证明,其他人已经写了一个服务单元,比我早 4 天,在https://unix.stackexchange.com/a/212117/5132时间回到2015年。
进一步阅读
- https://unix.stackexchange.com/a/233581/5132
- 乔纳森·德博因·波拉德 (2015)。 systemd 恐怖屋。经常给出的答案。
答案2
如果您使用完整的 systemd,则标准 sysvinit 脚本将被忽略。如果你想使用 sysvinit 脚本,你必须安装 systemd-shim