我的文件夹中有一个脚本:
/path/to/my/script.sh
我需要此脚本在系统每次启动时运行(即使没有人登录系统)。我需要做什么才能实现这一点?
答案1
您需要 root 权限才能执行以下任何操作。要获取 root 权限,请打开终端并运行命令
sudo -i
命令提示符将变为“#”,表示终端会话具有 root 权限。
替代方案 #1:添加命令/etc/rc.local
vi /etc/rc.local
内容如下:
# This script is executed at the end of each multiuser runlevel
/path/to/my/script.sh || exit 1 # Added by me
exit 0
替代方案 #2:添加 Upstart 作业(适用于 15.04 之前的系统)(不推荐)
创建 /etc/init/myjob.conf
vi /etc/init/myjob.conf
内容如下
description "my job"
start on startup
task
exec /path/to/my/script.sh
官方声明新贵网站-> “项目仅处于维护模式。没有开发任何新功能,一般建议是转移到另一个最小初始化系统或 systemd。”
替代方案 #3:添加初始化脚本(已过时)
在 中创建一个新脚本/etc/init.d/myscript
。
vi /etc/init.d/myscript
(显然它不必被称为“myscript”。)在这个脚本中,您可以做任何您想做的事情。也许只需运行您提到的脚本即可。
#!/bin/sh
/path/to/my/script.sh
使其可执行。
chmod ugo+x /etc/init.d/myscript
配置 init 系统以在启动时运行此脚本。
update-rc.d myscript defaults
答案2
您不需要 root 权限,甚至不需要登录。
您可以编辑 crontab ( crontab -e
) 并创建如下条目:
@reboot /path/to/script.sh
这样,您就可以以普通用户的身份运行它。@reboot
只是意味着它在计算机启动时运行(不一定是在重新启动时运行)。
PS:关于评论说这个不能正常使用
有人说这种方法不适用于基于 Debian 的发行版,例如 Ubuntu。我个人在 Ubuntu 和 Mint 上都成功使用过这种方法。不过,有几点需要考虑。
这些@reboot
作业将在 cron 守护程序启动时运行。我发现在基于 Debian 的发行版中,这可能在/home
分区挂载之前发生。如果您运行的脚本位于您的主文件夹中,它将失败。
此外,这不仅限于基于 Debian 的发行版,但如果您的主文件夹已加密,则可能要等到您登录后才能解密。可能没有办法解决这个问题。
此外,您的网络接口可能尚未启动,如果该命令需要互联网访问,则可能会失败。
最后,再次强调,这不仅限于基于 Debian 的发行版,但 cron 运行的环境比 shell 运行的环境要有限得多。特别是,变量的PATH
路径要少得多。如果正在运行的命令位于类似 的位置,则可能找不到该命令,该命令$HOME/.local/bin
可能位于PATH
您的 shell 会话中,但不在 下cron
。甚至可能正在运行的命令依赖于 中未设置的某些环境变量cron
。
因此,有很多原因导致您的命令需要在 cron 下运行,但这并不是因为它@reboot
在您的发行版上不起作用。
答案3
从终端
newshell.sh.desktop
在文件夹中创建文件~/.config/autostart
:gedit ~/.config/autostart/newshell.sh.desktop
更改
Exec
和Name
值Comment
并添加到文件:第一行[Desktop Entry] Type=Application Exec=/full/link/to/your/newshell.sh Name=newshell Comment=whatever you want
节省
或者
您可以从 GUI 进行操作:
- 在 Ubuntu 14.04 中运行“启动应用程序”工具,只需在搜索框中输入它即可。
- 添加相同
Exec
,Name
和Comment
。
答案4
只需编辑 rc.localnano /etc/init.d/rc.local
如下:
/path/to/my/script.sh || exit 1
exit 0