在新的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 回声演示输出 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在创建目录时工作得太快,或者内核工作得太慢。sleep 10
两mkdir
行之间必须有一条额外的线。
您可能不需要在两个make目录命令之间花费10秒钟的时间,但是在我使用SSD的系统上可以使用10秒钟。
根据下面的注释,可以使用一种更简单的方法:
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
打印所有已创建目录的名称。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句