2013-12-08 07:10:46 +0000 2013-12-08 07:10:46 +0000
27
27

开机后如何运行命令?

我想在每次启动时运行简单的shell命令echo 1 > /proc/sys/kernel/sysrq来启用sysrq键。在启动时应该在什么时候执行,我应该在哪里放一个脚本来执行?

答案 (3)

37
37
37
2013-12-08 07:37:04 +0000

取决于发行版。

如果你是在Debian衍生的发行版上,至少有两个合适的地方,/etc/rc.local和crontab。你可以以root身份调用crontab,

crontab -e

然后插入这行

@reboot /home/my_name/bin/my_command

其中my_command是一个可执行文件(chmod 755 my_command)。

或者,你可以在/etc/rc.local中插入这样一行

/home/my_name/bin/my_command

,这行将最后执行。在任何情况下,请记住你使用的是root环境,而不是你的环境。同样因为这个原因,最好使用绝对路径。

如果你使用的是systemd发行版(Arch Linux, Fedora 19, …),第一个选项(crontab)仍然有效,而第二个选项(/etc/rc.local)已经不存在了。在这种情况下,你应该学习如何启动一个由systemctl运行的服务,但这可能比你的简单问题更多。

19
19
19
2012-09-10 22:29:09 +0000

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

这是它支持的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 * * * *".

请注意,就@reboot而言,启动是指cron(8)守护进程的启动时间。特别是,它可能是在一些系统守护进程或其他设施被启动之前。这是由机器的启动顺序造成的。

这远不是启动时运行某些东西的_唯一方式,但这是一种选择。

9
9
9
2013-12-08 07:32:27 +0000

几乎所有的Linux变种(可以追溯到很久很久以前)都有一个在启动时运行的文件/etc/rc.local–你可以直接在里面添加命令。

也就是说,你根本不需要这么做。正确的方法是在/etc/sysctl.conf中修改/添加kernel.sysrq = 1这一行。