在我的新 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
打印所有创建的目录的名称。