无法手动运行rc.local,并不会在ubuntu上自动运行

这是相当简单的。 我在这里创build了一个rc.local文件:

/etc/rc.local 

我使它可执行。 但是,启动服务器时不会运行。 我可以在目录中看到它,当我尝试手动运行时,我收到以下消息:

 root@:/etc# rc.local rc.local: command not found 

我的rc.local文件如下所示:

 #!/bin/sh -e # FUNCTIONS function setup_logs { exec > >(tee -a /var/log/deploy.log) exec 2> >(tee -a /var/log/error.log) } # COMMANDS setup_logs apt-get update # Update aptitude list apt-get -y dist-upgrade # Upgrade aptitude programs cd /etc/spider && git pull # Update deployment code cd /etc/code && git pull # Update library code cd /etc/code && deployment.sh # Run deployment script exit 0 

对于我的生活,我不明白我的错在哪里,任何人都可以给我一些帮助?

Ubuntu默认使用破折号作为Shell,并且破折号不知道关键字function

尝试改变shebang

 #!/bin/bash 

并再次执行。

根据https://wiki.ubuntu.com/DashAsBinSh/#function ,它也应该有帮助,如果你只是删除字function并写在函数名称后面的括号:

 setup_logs() { exec > >(tee -a /var/log/deploy.log) exec 2> >(tee -a /var/log/error.log) } 

确保启动脚本位于您的rc运行级别文件夹中。

/etc/rc2.d/S22rc.local或类似的东西。

如果你的谷歌关于$ PATH,它真的会真的帮助你。 一旦你掌握了它,你可以运行任何你想要的,GUI或不,只要它在正确的$ PATH

对于OP,你在/ etc中,它是可执行的。 要在那里运行它,在前面放一个斜杠来说'从这里运行它',不要input文件名 – 类似于'ok run rc.local',如果你可以在你的$path'。

在terminal中键入'echo $ PATH',你就会开始理解,特别是如果你想掌握CLI

现在不要把/ etc放在PATH中; 我想让你知道为什么修复权限后,它没有做任何不同的事情。