如何在启动时自动启动应用程序

gor*_*rge 36 linux startup debian

我是 Linux 新手,期待启动应用程序(每 10 秒切换一次 LED)。我已经编写了应用程序并且它运行良好,但现在我想在启动时自动启动它。

此处的文档说将启动脚本复制到/etc/init.d目录中,并在目录中创建指向复制脚本的符号链接rc.d

这些脚本文件的扩展名和名称应该是什么?我们可以手动添加符号链接rc.d还是有一些特定的程序?

任何建议如何实现它?

Ale*_*kin 23

这是http://www.debian-administration.org/articles/28的摘录,它似乎回答了您的问题。

注意:在下面的示例脚本中,只需添加对“ start)”部分的调用即可实际启动您的程序。您可以在不重新启动系统的情况下测试脚本的功能:使用完整路径调用它并为其提供参数“ start”或“ stop

开始:

Debian 使用类似 Sys-V 的 init 系统在系统运行级别更改时执行命令 - 例如在启动和关闭时。

如果您希望在机器启动时添加一个新服务来启动,您应该将必要的脚本添加到该目录中/etc/init.d/。该目录中已经存在的许多脚本将为您提供可以执行的操作类型的示例。

这是一个非常简单的脚本,它分为两部分,始终运行的代码和使用“start”或“stop”调用时运行的代码。

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0
Run Code Online (Sandbox Code Playgroud)

将文件保存到正确位置后,通过运行“ chmod 755 /etc/init.d/blah”确保它是可执行的。

然后,您需要添加适当的符号链接,以便在系统出现故障或出现故障时执行脚本。

最简单的方法是使用 Debian 特定的命令update-rc.d

root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah
Run Code Online (Sandbox Code Playgroud)

  • 较新的系统在许多方面都使用了“systemd”,包括用于启动配置。使用 `systemctl` 来控制和配置 `systemd`。 (3认同)

Jit*_*ran 17

使用起来crontab要容易得多。

使用crontab -e以编辑用户的crontab。
在最后添加以下行:

@reboot <command>
Run Code Online (Sandbox Code Playgroud)

例子:

  • @reboot my_script.sh
  • @reboot python my_script.py arg1 arg2

最后,使用crontab -l以确保您的脚本已添加到列表中。


更新:

例如,这个 liner 将添加一个在每次重新启动时运行 script.sh 的作业:

crontab -l > file; echo "@reboot /home/user/script.sh" >> file; crontab file; rm file;
Run Code Online (Sandbox Code Playgroud)

归功于:Gumby The Green 19 年 7 月 16 日 10:20

/sf/users/655480031/

  • 我想知道为什么这个答案收到了反对票?似乎是一个非常简单的解决方案,并且使用了 crontab - 可能每个人都已经知道并理解了。 (4认同)

mar*_*aft 12

较新版本的 linux支持 systemd(如@AlexanderShcheblikin 所说)。它具有更多功能,并且比特定于 debian 的解决方案更便携。

请阅读 这个非常棒的指南

以下是所需最低限度的快速参考:

  1. myscript.sh具有可执行权限的脚本(例如)。
  2. myservice.service带有“.service”扩展名的单元文件(例如),/etc/systemd/system具有 644 权限,其中包含执行脚本的命令。例如,

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
  1. 运行该命令sudo systemctl enable myservice以使其在引导时启动。


pet*_*rph 4

最好的方法是检查您的发行版的软件包源是否有常规系统服务,例如 OpenSSH - 您将看到什么是好的做法。毕竟,开源背后的原因之一是能够从源代码中学习。

  • 非常好的建议!真正明智且相关,并适合所有 Distos。(顺便回答了问题的“Linux 新手”和“我该怎么做”部分。我将使用这个答案来改进我的启动停止脚本。 (2认同)