bash脚本手动工作,但不是由Cron调用

分享于 

4分钟阅读

ubuntu

  繁體 雙語

问题:

我有一个长期运行的cron作业,我想运行 @reboot. 我正在调用一个bash脚本,它运行另外两个bash脚本,使用 crontab -e 作为 root ( 无外设ssh机器)。 看起来像bash脚本的第二行正在运行,但是不是第一行。

start.sh 调用 first.shsecond.shsecond.sh 似乎正在运行,但不。

我找不出什么是错误的。 i &>> 中的output。bash调用的bash脚本以及第一个脚本调用的bash脚本都添加了输出。 一切都出来了。

我已经尝试过这个插件,这个插件,检查系统日志,尝试用strace的方式来处理 spy。 我看的所有东西都是空白的。 所有的&>> *.log 文件都是空的,在正在运行的进程上没有返回任何内容,而且我无法在任何进程管理器中找到运行。

ps aux | grep sh 不显示要运行的first.sh。

如何才能找到 first.sh 未运行的原因? 它是可以执行的,当我登录并用终端调用它时工作正常。 甚至直接从 crontab -e 调用它也不做任何事情。 相同结果。

编辑:这个问题被标记为的可能复制。 尽管这是有用的信息,但它并没有解决这个问题。 同样的问题仍然存在,在cron中。

编辑:根据注释请求,包括用于语法错误的脚本: ~/youtube.sh,,。

当我手动打这些电话的时候。 当我从crontab中调用它们时,即使直接调用它们,它们也不工作。 ~/copy.sh 是来自crontab的,而其他则不是。


回答 1:

我不能说为什么,但有时不幸的是,有些事情并不能使用 @reboot cron作业( 关于此类问题的示例)。 对于proove是否造成问题,你可以创建一个常规作业并验证它是否按照预期执行。

如果遇到描述问题,你可以某种方式重新创建脚本。 或者,你可以尝试在启动期间执行脚本,例如通过 /etc/rc.local 或者 systemd单元

我可以尝试将脚本的执行转发到 at 命令中的命令,例如:


@reboot echo"/path/to/script.sh>> /path/to/the.log 2>&1" | at now



或者添加 ~1 分钟延迟:


@reboot echo"/path/to/script.sh>> /path/to/the.log 2>&1" | at now + 1min



另外,如果它执行该任务,它将很酷:

  • crontab 中,envvar $PATH的默认vale是 /usr/bin:/bin。 对于位于这些目录之外的所有命令/脚本,应应用完整路径;在作业之前可以使用新的路径;甚至可以使用 $(which my_command),甚至可以使用代替 my_command

  • 你不需要在脚本的名称前面键入 sh,如果: 它是可以执行的;你使用的是完整路径;文件的第一行是 shebang #!/bin/sh


回答 2:

就像steeldriver所说,我认为这个问题与sh命令有关。 我将编辑你的脚本以删除sh命令。 如果脚本读取 cd ~/filename/&& sh ~/filename/run.sh &>> ~/filename.sh.log,则在 && 之后删除sh命令;。 我也认为使用绝对路径也是一个好主意,但是我很确定你所有脚本中的of命令。 打开一个终端,就像我想打开一个叫做Leafpad的程序。 在输入sh时,出现错误,如果不使用sh命令,那么它就会启动 leafpad。 通过在正在执行的命令前面使用 ssh,实际上运行的命令是不存在的。



MAN  CAL  调用  BASH  Manual  CRON  
相关文章