linux - 为什么 crontab 成功运行了我的 shell 脚本,但无法启动我的二进制文件程序?

标签 linux unix cron

我编写了如下的 shell 脚本:

#!/bin/bash

/root/bin/mybin >> a.log

然后我用crontab定时启动。 结果是:

  1. crontab 运行这个脚本(a.log 存在,我可以从/var/log/cron 看到日志,它也显示 crontab 运行它)
  2. 但是 mybin 没有运行(mybin 是一个 while(true) 循环程序)

我可以从 linux shell 手动运行脚本。

而且我确信它与用户访问问题无关,因为我将其用作 Root。

使用命令

strace -f -o /tmp/data.log ~/deploy/StartData.sh >> ~/script-log/data.log

strace 输出包含

7011 write(2, "/root/deploy/StartData.sh: line "..., 80) = 80 
7011 write(2, "/root/deploy/StartData.sh: line "..., 82) = 82 
7011 exit_group(2) = ? 
7011 +++ exited with 2 +++ 

这些是/tmp/mybin.trace的最后信息,除此之外,没有错误信息

这真的让我很困扰,很高兴听到任何建议。

最佳答案

strace 的输出显示 shell 脚本 /root/deploy/StartData.sh 中发生错误,并且 shell 以退出代码 2 退出。

7011 write(2, "/root/deploy/StartData.sh: line "..., 80) = 80 → 包含文件名和(可能)行号的错误消息
7011 exit_group(2) = ? → 程序以代码 2 退出(可能是错误指示)

根据 reference of shell exit codes这可能意味着

Misuse of shell builtins (according to Bash documentation)

您的程序/脚本从 cron 运行时似乎有问题。可能的原因可能是:

  • 脚本没有关联的终端。
  • 脚本在不同的目录中运行。
  • (可能更多)

为了获得更好的答案,请按照评论中的提示进行操作。

关于linux - 为什么 crontab 成功运行了我的 shell 脚本,但无法启动我的二进制文件程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145509/

相关文章:

linux - 处理 systemtap 用户空间脚本(变量)中的长探测路径?

iphone - Linux Mint 19 - 镜像 iPhone

unix - 汇编代码。 = 60^。在UNIX V6源代码的low.s文件中

linux - UNIX 脚本文件的开头是否允许使用 Unicode 字节顺序标记?

java - Apache 点燃。如何创建计时器任务(基于 cron)而不在每个节点上执行?

jenkins - 每天在 8 :30 AM except on Friday 安排 Jenkins 作业

kubernetes - 在 Kubernetes 中创建作业和 cronjob 的命令式命令

linux - 为 UART 串​​口通信启用 ACK/NAK 握手

linux - 如何在第一行设置第二行和第三行的格式?

linux - 如何像这样grep字符串?