启动后如何运行命令?

Dem*_*emi 29 linux boot script init systemd

我想echo 1 > /proc/sys/kernel/sysrq在每次启动时运行简单的 shell 命令,以启用 sysrq 键。在启动时应该这样做,我应该在哪里放置脚本来做到这一点?

Mar*_*iae 38

取决于发行版。

如果您使用的是 Debian 衍生发行版,那么至少有两个合适的位置,/etc/rc.local 和 crontab。您可以以 root 身份调用 crontab,

   crontab -e
Run Code Online (Sandbox Code Playgroud)

然后插入这一行

   @reboot /home/my_name/bin/my_command
Run Code Online (Sandbox Code Playgroud)

哪里my_command是可执行文件 ( chmod 755 my_command)。

或者,您可以像这样放置一条线

   /home/my_name/bin/my_command
Run Code Online (Sandbox Code Playgroud)

在 /etc/rc.local 中,这将最后执行。无论如何,请记住您使用的是 root 环境,而不是您的。同样出于这个原因,最好使用绝对路径。

如果您使用的是systemd发行版(Arch Linux、Fedora 19 等),第一个选项 (crontab) 仍然有效,而第二个选项 (/etc/rc.local) 不再存在。在这种情况下,您应该学习如何启动由 运行的服务systemctl,但这可能超出您对简单问题的讨价还价。

  • 也许这对我来说是一个未知的别名,但 `@boot` 不存在,只是 `@reboot` http://www.debianhelp.co.uk/crontab.htm (2认同)

Kei*_*son 19

如果您的系统正在运行cron支持它的版本(特别是 Vixie cron),您可以@reboot在 cron 作业中使用。

这是它支持的 8 个特殊字符串之一。

引用crontab(5)手册页(来自我的 Ubuntu 12.04 系统):

可能会出现八个特殊字符串之一,而不是前五个字段:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".
Run Code Online (Sandbox Code Playgroud)

请注意,startup@rebootcron(8)守护进程启动的时间。特别是,它可能在某些系统守护程序或其他设施启动之前。这是由于机器的启动顺序。

这远不是在启动时运行某些东西的唯一方法,但它是一种替代方法。

  • 这个答案怎么会写在 ** 一年多之前** 原始问题? (3认同)
  • @MariusMatutiae https://meta.stackoverflow.com/q/294543/827263 (2认同)

dav*_*dgo 9

几乎所有 Linux 变体(可以追溯到很久以前)都有一个在启动时运行的文件 /etc/rc.local - 您只需向其中添加命令即可。

也就是说,你甚至不需要这样做。“正确”的方法是修改/添加行 kernel.sysrq = 1 到 /etc/sysctl.conf