我编写了如下的 shell 脚本:
#!/bin/bash
/root/bin/mybin >> a.log
然后我用crontab定时启动。 结果是:
- crontab 运行这个脚本(a.log 存在,我可以从/var/log/cron 看到日志,它也显示 crontab 运行它)
- 但是 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/