无法手动运行 rc.local,也无法在 ubuntu 上自动运行

无法手动运行 rc.local,也无法在 ubuntu 上自动运行

这个很简单。我在这里创建了一个 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

我一生都不明白我错在哪里,有人可以帮我吗?

答案1

Ubuntu 默认使用 dash 作为 Shell,而 dash 不认识关键字function

尝试将 shebang 更改为

#!/bin/bash

并再次执行。

根据https://wiki.ubuntu.com/DashAsBinSh/#functionfunction,如果您删除该单词并在函数名称后面写上括号,也应该有帮助:

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

答案2

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

/etc/rc2.d/S22rc.local 或类似内容。

答案3

伙计们,如果你在 Google 上搜索 $PATH,那真的会很有帮助。一旦你掌握了它,你就可以运行任何你想要的东西,无论是否是 GUI,只要它在正确的 $PATH 中

对于 OP,您位于 /etc 中,它是可执行的。要立即运行它,请在前面放一个点斜杠以表示“立即从此处运行它”,而不要只输入文件名——这类似于“如果可以在 $PATH 中找到它,则运行 rc.local”。

在终端中输入“echo $PATH”,你就会开始理解,特别是如果你想掌握 CLI

现在不要开始将 /etc 放入 PATH;我想让您了解为什么在修复权限后它没有任何不同。

相关内容