在系统启动时启动脚本(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
打印创建的所有目录的名称。