所以基本上我有一个 JS 应用程序位于/var/lib/app/
.为了启动这个节点应用程序,我startapp.sh
从目录内部执行启动脚本。现在我需要它在启动时启动,因此我在 Ubuntu 服务器内部创建了一个 upstart 作业,/etc/init
并给出了 , 的绝对路径startapp.sh
,以在启动时触发。
但是每当我尝试执行任何触发的脚本时startup.sh
,它都无法启动,因为它依赖于目录内的激活器文件来启动/var/lib/app/
。我已经导出了 中的路径.bashrc
,但仍然无法从 Ubuntu 服务器中除/var/lib/app/
目录之外的任何位置执行该作业。
如何从服务器上的任何位置执行 shell 脚本?
答案1
您必须将/var/lib/app/
目录添加到您的 PATH,而不是/var/lib/app/startapp.sh
.
去做这个永久,首先输入以下命令查看您的 PATH 环境变量:
echo $PATH
您将得到的输出将类似于:
/usr/local/bin:/bin:/usr/bin/:usr/local/sbin:/usr/sbin/ ...
您不应该改变顺序,因此在导出时您应该PATH="$PATH:/..."
使用附加到刚刚显示的先前原始路径的新路径。
通过或任何您喜欢的编辑器打开您的.bashrc
(假设它是从~/.profile
OSX 上调用的)并添加以下行:vi
export PATH="$PATH:/your/absolute/path"
你应该添加你的绝对路径,它意味着您的应用程序所在的目录,因此当您输入应用程序的文件名时,它就会被执行。例如,当您输入 时pwd
,它从目录运行/bin/
- 您可以在 PATH 环境变量中看到 - 因此脚本是/bin/pwd
.要查看它,请输入which pwd
您的 bash。我认为你的绝对路径是/var/lib/app/
如果它下面没有目录并且你的应用程序在那里。
如果您做得正确,这将起作用,但如果没有,最简单的方法是将您编写的应用程序/var/lib/app/
从/bin/
.
$ cd /var/lib/app/
$ mv * /bin
答案2
要从存储可执行文件的文件中读取数据:
#!/bin/bash
old_dir="$(pwd)"
cd "$(dirname "$0")"
this_dir="$(pwd)"
cd "${old_dir}"
unset old_dir
# read from where executable is stored
echo "${this_dir}/data"
# read for present working directory
echo "$(pwd)"