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

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

我发现了很多post和方法。 所以我试图通过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 /cronjobs/demo.sh || exit 1
  • 重启系统

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

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

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

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

 #!/ bin / sh的
 echo演示输出
 mkdir / cronjobs / demofolder

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

最简单的解决方案是使用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工作得太快,或者内核在制作目录时工作得太慢。 两条mkdir线之间需要额外的线路sleep 10

在两个make目录命令之间可能不需要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 (long version --parents )告诉mkdir自动创建所有目录父级别(如果它们不存在)。
  • -v (长版本--verbose )告诉mkdir打印创建的所有目录的名称。