【问题标题】:Issue running a .SH file on server reboot - Ubuntu 12.04 LTS在服务器重新启动时运行 .SH 文件的问题 - Ubuntu 12.04 LTS
【发布时间】:2013-11-22 13:25:10
【问题描述】:

我在运行 .sh 文件时遇到问题。我可以在我的应用程序目录中通过 sudo ./starter.sh 运行它,但是在重启时依赖它是行不通的。

我在 Windows 7 上使用 Ubuntu 12.04 VM。我在 Windows 上与 VM 共享文件,因此我通过 /mnt/hgfs/nodejs-test 访问我的文件

我正在通过我的本地 VM 使用 Nginx 运行 node.js 服务器。

截至目前,我可以转到http://node.dev,它会正确加载我位于 nodejs-test (/mnt/hgfs/nodejs-test) 中的 server.js 并将 hello world 输出到屏幕。

因此,运行该站点不是问题..但是永远(全局安装 forever.js)在重新启动时启动是行不通的。 我怀疑它根本无法执行我的 SH 文件。

这是我的 starter.sh

#!/bin/sh


if [ $(ps aux | grep $USER | grep node | grep -v grep | wc -l | tr -s "\n") -eq 0 ]

  then

  export PATH=/usr/local/bin:$PATH

  forever start --sourceDir /mnt/hgfs/nodejs-test/server.js >> /mnt/hgfs/nodejs-test/serverlog.txt 2>&1

fi

现在我尝试了 sudo crontab -e (并将我的路径添加到文件)以及 crontab -e 并做了同样的事情。重启后……什么都没有。

@reboot /mnt/hgfs/nodejs-test/starter.sh

我尝试将那个 cronjob 编辑为此

@reboot /var/www/nodejs-test/starter.sh

因为我在 /var/www/nodejs-test 中创建了一个指向 /mnt/hgfs/nodejs-test 的符号链接

我在哪里可以检查重启时是否出现错误,或者我的重启 cron 是否根本没有运行?我知道运行 starter.sh 确实有效。

编辑 /mnt/hgfs/nodejs-test 由 root 拥有(考虑到文件存在于我的 Windows 7 操作系统上,这可能是 Windows 的事情)。我的 ubuntu 用户是我在安装 VM 时创建的“bkohlmeier”。

编辑#2

Nov 10 13:05:01 ubuntu cron[799]: (CRON) INFO (pidfile fd = 3)
Nov 10 13:05:01 ubuntu cron[875]: (CRON) STARTUP (fork ok)
Nov 10 13:05:01 ubuntu cron[875]: (CRON) INFO (Running @reboot jobs)
Nov 10 13:05:02 ubuntu CRON[887]: (bkohlmeier) CMD (/mnt/hgfs/nodejs-test/starter.sh)
Nov 10 13:05:02 ubuntu CRON[888]: (root) CMD (/var/www/nodejs-test/starter.sh >/dev/null2>&1)
Nov 10 13:05:02 ubuntu CRON[877]: (CRON) info (No MTA installed, discarding output)
Nov 10 13:05:02 ubuntu CRON[878]: (CRON) info (No MTA installed, discarding output)

【问题讨论】:

  • 我不知道,但从 cron 日志看来它确实看到了 sh 并尝试执行它对吗?
  • 是的,看起来就是这样......甚至似乎它通过我的用户名和 root 尝试。但即使我在 SH 文件中执行一个简单的 mkdir blah,它也永远不会触发。
  • 我尝试了另一个,称为 test.sh,它唯一的工作就是 mkdir test1。当我通过 ./test.sh 运行它时,它运行良好..当我在 crontab 中设置它并重新启动时,nada。呸呸呸

标签: node.js bash ubuntu nginx


【解决方案1】:

好的,我找到了解决方案。我不知道这是否是“正确”的解决方案。因为我的系统在 HOST 和 GUEST(Windows 7 和 Ubuntu VM)之间共享文件,所以 /mnt/hgfs/ 必须挂载(我认为)..并且重启发生得足够快,我认为挂载还不知道。

所以我通过 crontab -e 添加了这个

@reboot /bin/sleep 15; /var/www/nodejs-test/starter.sh

它就像一个魅力。

【讨论】:

  • 如果你把sleep移到开头的sh文件里面,能用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
相关资源
最近更新 更多