系统启动时启动脚本(Ubuntu 16.04.1)

系统启动时启动脚本(Ubuntu 16.04.1)

在我的新 Ubuntu 系统上,我尝试在系统启动时自动启动 Bash 脚本。

我发现了很多关于它的帖子和操作方法。所以我尝试通过 Crontab 来实现:

  • 跑步crontab -e
  • 添加@reboot /cronjobs/demo.sh >> /cronjobs/cronLogs/demo.output
  • 使用以下命令设置脚本的执行权限sudo chmod +x /cronjobs/demo.sh
  • 重启系统

输出已创建,但脚本不会执行。因此,我尝试了另一种解决方案rc.local

  • 跑步sudo vi /etc/rc.local
  • 添加/cronjobs/demo.sh || exit 1
  • 重启系统

但是我的脚本没有运行。所以我读到,重新启动时脚本必须位于 中/etc/rc0.d/。所以我尝试了这个:

  • 移动脚本mv /cronjobs/demo.sh /etc/rc0.d/K99_demo.sh
  • 检查权限(一切似乎正常)
  • 重启系统

同样的事情——脚本将不会被执行。

那么,我的错误是什么?为什么我的脚本无法执行?如果我./demo.sh切换到文件夹后运行,我可以执行我的脚本cd /cronjobs。该脚本是一个演示文件,它只是创建一个文件夹:

/bin/sh #!/bin/sh 复制代码
echo 演示输出
mkdir /cronjobs/demofolder

编辑:替换路径和文件名;添加demo.sh文件的完整内容

答案1

最简单的解决方案是使用 sudo powers 创建如下文件/etc/cron.d/

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    mkdir /cronjobs
@reboot   root    sleep 10
@reboot   root    mkdir /cronjobs/demofolder

这避免了使用脚本文件,并且适用于所有用户,无论他们的主目录名称是什么,例如 /home/steve、/home/mary 等。

编辑-添加sleep 10

无论出于什么原因,cron 运行得太快,或者内核在创建目录时运行得太慢。sleep 10两行之间需要添加一行mkdir

两个创建目录命令之间可能不需要间隔 10 秒,但在我的带有 SSD 的系统上,间隔 10 秒就可以了。

编辑 2 - 在一个命令中创建完整目录路径

根据以下评论,一种更简单的方法是使用:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    mkdir -p -v /cronjobs/demofolder
  • -p(长版本--parents)告诉mkdir如果不存在则自动创建所有目录父级。
  • -v(长版本--verbose)告诉mkdir打印所有创建的目录的名称。

相关内容