开机后如何运行命令?
我想在每次启动时运行简单的shell命令echo 1 > /proc/sys/kernel/sysrq
来启用sysrq键。在启动时应该在什么时候执行,我应该在哪里放一个脚本来执行?
取决于发行版。
如果你是在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
运行的服务,但这可能比你的简单问题更多。
如果你的系统正在运行支持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)守护进程的启动时间。特别是,它可能是在一些系统守护进程或其他设施被启动之前。这是由机器的启动顺序造成的。
这远不是启动时运行某些东西的_唯一方式,但这是一种选择。