Nohup错误:没有这样的文件或目录。

11

我试图运行一串nohup命令来获取服务器统计信息。然而,我遇到了一个错误'No such file or directory'。请注意,这3个nohup调用嵌入在一个脚本中,该脚本通过cron作业执行。第一个nohup可以正常工作,但其他两个返回错误。具有讽刺意味的是,在另一台服务器上运行时,该脚本可以正常工作。

  • Commands

    nohup vmpstat -a -n 60 1000 > myvmstats
    
  • (works)

    nohup mpstat -P ALL 1 1000 > mympstats
    
  • (returns: nohup cannot run command mpstat: no such file or directory)

    nohup iostat -t -x 60 1000 >myiostats
    
  • (returns: nohup cannot run command iostat: no such file or directory)

有什么问题吗?

mpstat或iostat是别名吗?你能自己运行这些命令吗? - Jonathan Leffler
它在cron下运行时遇到了问题;当通过cron运行时,是否PATH上缺少了某些命令? - Jonathan Leffler
我可以自己运行这些命令。我在两个设置相同的不同服务器上基本上使用相同的脚本。 我只是用cron触发脚本。 实际上,我刚刚尝试运行脚本本身,它可以工作。 我想知道是否与在cron内运行有关? 虽然对于另一个服务器来说几乎是相同的,并且在cron内运行。 - Switch
2
在 cron 运行的脚本中添加一个命令/行:env > /tmp/cron.job。检查 PATH 是否包含您期望的内容,特别是是否包含每个程序安装的目录(目录)。确保从命令行运行您期望的程序:which vmpstat mpstat iostat。合理猜测两个“丢失”的命令在 cron 运行脚本时不在 PATH 的目录中。而 cron 给您提供了一个最小的环境;在这方面它与 at 完全不同。 - Jonathan Leffler
谢谢Jonathan!!! 结果发现包括整个mpstat安装路径是有效的。虽然我觉得在第二台服务器上相同的设置无需包含整个路径有些奇怪。 无论如何,现在一切都回应良好。 再次感谢 - Switch
在我的情况下,Michael Hampton的这个答案指明了从守护进程转换到nohup以及参数周围的引号的方向:https://serverfault.com/questions/477686/nohup-no-such-file-or-directory - Paul
3个回答

4
我认为你应该提供程序的相对/绝对路径。
例如: nohup ./****.sh > /home/user/test.txt

3
通常在命令行上运行的脚本无法通过cron运行的常见问题是“环境”。这在许多SO问题中都有体现,包括: 为了调试目的,在cron运行的脚本中添加一个命令/行,执行以下操作:
env > /tmp/cron.job

请检查PATH是否包含您期望的内容,特别是是否包含每个程序安装的目录(目录)。并且确保您从命令行运行了您期望的程序:

which vmpstat mpstat iostat

很有道理的猜测是,当您的脚本由运行时,这两个“缺失”的命令不在PATH上的目录中。并且会给您提供一个最小限度的环境; 在这方面它完全不像。
另请参阅:

0

我在尝试使用nohup运行Python脚本时遇到了这个问题。

如果有人遇到了这种情况,并且如果上述jeremyxu(10年前)的答案不能解决您的问题,那么Linux还需要提供Python文件夹的完整路径。

  1. 获取完整路径

which -a python3

  1. 获取sudo权限

sudo nohup /usr/local/bin/python3.10 script.py


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接