我的初始化脚本未显示在服务自动完成中

我的初始化脚本未显示在服务自动完成中

我为一个幽灵网站制作了一个初始化脚本。我使用的是 Linux Mint 16(又名 Ubuntu 13.10)

当我输入此内容时,我的脚本没有显示在自动完成功能中。

sudo service f<tab>

有什么原因吗?我得到了一个不同的脚本“friendly_recover”,但不是我的。

谢谢!

麦克风

/etc/init/furtheryet.org.conf

# furtheryet.org

start on startup

script
    cd /var/www/furtheryet.org/ghost
    npm start --production
end script

答案1

您是否希望它sudo service f<tab>能够自动完成sudo service furtheryet.org.conf

不会,因为:

  • 这只是一个配置文件
  • 它位于错误的目录中

您应该考虑该/etc/init.d文件夹:

  • /etc/init/文件夹仅包含所使用的配置文件 Upstart

  • /etc/init.d文件夹包含响应 startstoprestartreload(以及您可以实现的任何内容)的 shell 脚本。

进一步阅读:https://askubuntu.com/questions/5039/what-is-the-difference-between-etc-init-and-etc-init-d

也就是说,为了使您的脚本自动完成,您至少应该将其放在/etc/init.d文件夹中,并使其可执行。

但你的脚本实际上只是一个配置文件。你应该考虑编写一个特定的服务/初始化脚本并将其放入您的/etc/init.d文件夹中。


在某些情况下,我注意到即使脚本位于您中,您仍可能会遇到作为用户的/etc/init.d自动完成问题。Ubuntu 13.10root

要纠正此问题,请以 root 用户身份编辑$HOME/.bachrc文件并取消注释以下内容:

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

然后.bashrc通过运行重新加载文件:. $HOME/.bashrc

答案2

这是一个老问题,但我通过谷歌找到了它,所选的答案是错误的。

Upstart 作业必须放置到/etc/init文件夹中。

根据 Debian 政策,每个使用 upstart 提供标准守护进程的软件包都需要在 /etc/init.d 中提供符号链接。

然后,sudo 服务名称的自动完成将会起作用。

/etc/init 中有一些特殊的 upstart 作业,它们在 /etc/init.d 中没有对应的条目。这些作业是个例外。

答案3

如果您在同一个目录中,请输入 ,./f然后点击<tab>。否则,您必须先输入:,/etc/init/f然后再点击<tab>

并且你的脚本必须是可执行的:

chmod +x /etc/init/furtheryet.org.conf

相关内容