问题描述
我有一个脚本,可以在不使用networkmanager的情况下自动启用我的wifi,但我不知道如何在系统启动时以root身份运行脚本。如何在启动过程中自动运行脚本?
最佳解决方法
将要运行的脚本放在/etc/init.d目录中,并使脚本可执行。
chmod 755 myscript
完成后,在您想要使用的运行级目录中创建一个符号链接,例如,如果您想在图形运行级别2(Ubuntu的默认运行级别)中运行程序,您可以将其放在/etc/rc2.d
目录中。您只是不能将它放在目录中,您必须通过使用“S”指示启动来表示何时运行,并且执行顺序很重要。将它放在目录中的所有其他内容之后,给它一个更高的数字。
如果要运行的最后一个脚本是rc.local
并且它名为S99rc.local
,那么您需要将脚本添加为S99myscript
。
ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
每个向后兼容的/etc/rc*.d
目录都有指向/etc/init.d/
目录的符号链接。
次佳解决方法
在/etc/rc.local
中包含该命令。只要用户的运行级别发生变化,它就会运行。
注意:您必须将命令放在/etc/rc.local中包含以下内容的最后一行之前:“exit 0”。
第三种解决方法
使用crontab
选项使脚本在重新启动后运行,
你可以通过在cron中添加@reboot
代码来实现
@reboot yourScriptPath
会做的
第四种方法
将您的脚本文件包含在具有可执行权限的/etc/init.d/
中,然后设置不同的运行级别
$ update-rc.d script-name default
它会将您的脚本置于启动启动状态。
第五种方法
在/etc/cron.d/
中创建这样的文本文件:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root yourScriptPath
(您应该将yourScriptPath
替换为要运行的脚本的路径。)
第六种方法
这在Ubuntu 17.04上对我有用:
-
创建旅游脚本文件,如
disable_cdrom
,方便您的位置。在我的情况下home/yterle/disable_cdrom
。就我而言:#!/bin/sh eject /dev/sr0 -i 1
-
使其可执行
chmod 775 disable_cdrom
-
导航到
/etc/systemd/system
并在那里创建一个service
文件。例如sudo gedit /etc/systemd/system/disable_cdrom.service
我的disable_cdrom.service
看起来像这样:
[Unit]
Description=Disable cdrom
[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom
[Install]
WantedBy=multi-user.target
ExecStart
指向使用/bin/sh
运行脚本的位置
然后运行systemctl enable vgaoff.service
以启用systemd服务