Linux 中相当于 Windows 启动的是什么?

Linux 中相当于 Windows 启动的是什么?

有什么方法可以将应用程序/脚本添加到 Linux 启动中,以便每次系统启动时都会执行它?

我正在寻找一些自动化的方式,即用户不应该通过 cron 作业或类似的方式添加它。

答案1

就像是克朗

注意@reboot条目

这是最灵活的方法,也是最像 Windows 的“计划任务”的方法(实际上更好)。

答案2

Xorg 自动启动

除了系统级启动脚本之外,您的桌面环境可能还有自己的自动运行程序的方式。该文件夹.config/autostart应该是定义自动运行条目的与桌面无关的方式。/etc/xdg/autostart用于系统范围的配置。有关规格的详细信息,请访问http://developer.gnome.org/autostart-spec/

对于 LXDE 自动启动条目也可以在~/.config/lxsession/LXDE/autostart.

如果您需要运行脚本,情况会有点不同网络已启动并正在运行。在这种情况下,您应该检查可以为您的网络管理员定义的特殊连接后脚本。两个都网络管理器世界文化中心有自己的方法来指定连接后自动运行条目。如果通过配置网络ifupdown,则可以将后期脚本放置在该/etc/network/if-up.d/文件夹中。但运行连接后脚本的更好方法可能是 systemd(对于支持它的系统,这是大多数现代发行版)。

作为 systemd 服务自动启动

如果您想要自动启动的不是需要桌面的图形应用程序,那么最好避免使用 xorg 或当前桌面环境提供的任何自动启动工具。

systemd在许多现代发行版中已经变得无处不在,并且它在服务的启动方式和运行方式方面提供了很多控制和灵活性。

我将总结一些好处(systemd 可以做更多事情):

  • 以 root 或特定用户身份运行:例如User=myuser
  • 失败时重新启动服务并使用可配置的超时:Restart=on-failure|on-watchdog|on-abnormal|always
  • 设置服务类型:Type=simple|forking|oneshot|notify|dbus
  • 建立启动前提条件和依赖关系,即您可以将服务设置为在网络启动后启动(Wants=network-online.target在参考资料[Unit]部分中)。

启动 telegram-cli 守护进程的示例服务。将其放入/etc/systemd/system/tg.service.

[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli

User=jicu

[Install]
WantedBy=multi-user.target

现在您可以启用该服务自动启动:

sudo systemctl enable tg

启动服务:

sudo systemctl start tg

停止服务:

sudo systemctl stop tg

检查状态:

systemctl status tg

禁用该服务:

sudo systemctl disable tg

为了节省您额外的打字时间,您可以添加该~/.bashrcalias sc='sudo systemctl $*',然后您就可以将上面的命令缩短为例如sc start tg

注意:如果您使用过,cron那么就会知道 crontab 条目是在受限环境中运行的 - 这同样适用于systemd:始终使用绝对路径,并且不对定义的任何变量进行假设。显式设置脚本依赖的任何变量。systemd 将不会使用您的用户的.bashrc$PATH.

更多信息:

答案3

是的,可以通过定义rc.local驻留在/etc/etc/rc.d目录中的可执行文件的路径来在 Linux 上启动时运行程序,例如:

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
/path/to/executable

注意:不要忘记按照文件文档中的描述分配可执行权限,即Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.

答案4

每个发行版都使用各自的引导技术,因此需要查看您的发行版的文档。 /etc/rc.local是一个可以放置一些自动化脚本的地方,但它确实已经过时了。现在大多数基于 Linux 的系统都使用运行级别或 systemd 引导,因此大多数自动启动的作业都可以进行精细控制。

相关内容