Golang Go语言编译生成文件无法用 crontab 执行, sh -x 分析报错 cannot execute binary file, 命令行下可以执行

发布于 1周前 作者 gougou168 来自 Go语言

aiFileTrans 程序每 2 分钟扫描读取解析文件,把解析的每行数据插入 MySQL 数据库。程序在终端可以运行。

aiFileTrans 程序权限是可执行的,就在本机上编译生成的包,但就是报错:cannot execute binary file,是不是我 crontab 需要声明环境变量呢?请大神指点,先谢谢了。 报错内容(重定向到 /root/1.txt )

[root[@localhost](/user/localhost) bin]# cat /root/1.txt 
/root/tasks/go/fjgd/bin/aiFileTrans: /root/tasks/go/fjgd/bin/aiFileTrans: cannot execute binary file

crontab 内容如下:

*/2 * * * * sh -x /root/tasks/go/fjgd/bin/aiFileTrans -c /root/tasks/go/fjgd/bin/aiFileTrans.xml >/root/1.txt 2>&1

Golang Go语言编译生成文件无法用 crontab 执行, sh -x 分析报错 cannot execute binary file, 命令行下可以执行

更多关于Golang Go语言编译生成文件无法用 crontab 执行, sh -x 分析报错 cannot execute binary file, 命令行下可以执行的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

8 回复

我把 crontab 里面写的“-c -c /root/tasks/go/fjgd/bin/aiFileTrans.xml ”去掉,现在 crontab 内容
*/2 * * * * sh -x /root/tasks/go/fjgd/bin/aiFileTrans >/root/1.txt 2>&1
还是报错:
/root/tasks/go/fjgd/bin/aiFileTrans: /root/tasks/go/fjgd/bin/aiFileTrans: cannot execute binary file

更多关于Golang Go语言编译生成文件无法用 crontab 执行, sh -x 分析报错 cannot execute binary file, 命令行下可以执行的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你知道 sh -x 是什么意思吗?

。。。。。。你二进制文件为什么要用 sh 去执行
直接执行就行了
如果还不成功,去看 /var/log/cron 里的日志

opcache.save_comments = 0;
就好了

谢谢 的回复。

日志里面显示有这个 crontab 任务的执行记录,但是没有生成日志

sh 执行是为了分析为啥 crontab 不执行,是为了诊断,最终是想是想定时运行这个程序



别人的意思是 sh -x 不能跑二进制程序

sh -x /bin/cp
/bin/cp: /bin/cp: cannot execute binary file

哦,明白了,非常谢谢哈

针对您提到的Golang编译生成的文件在crontab中无法执行,但在命令行下可以执行的问题,这通常是由于环境变量或路径设置不当导致的。以下是一些可能的解决步骤:

  1. 检查环境变量: crontab运行的环境变量可能与您的命令行环境不同。特别是PATH变量,它决定了系统查找可执行文件的路径。您可以在crontab中显式设置PATH变量,例如:

    PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/path/to/your/go/bin
    
  2. 使用绝对路径: 在crontab任务中,直接使用Golang编译生成文件的绝对路径,以避免路径解析错误。

  3. 文件权限: 确保编译生成的文件具有可执行权限。您可以使用chmod +x filename来添加执行权限。

  4. 使用shell脚本包装: 编写一个简单的shell脚本,该脚本设置必要的环境变量并调用您的Golang程序。然后,在crontab中调用这个shell脚本。

  5. 调试crontab: 在crontab任务中加入输出重定向,将输出和错误信息写入文件,以便分析:

    * * * * * /path/to/your/go/binary >> /path/to/logfile 2>&1
    

通过以上步骤,您应该能够定位并解决在crontab中无法执行Golang编译生成文件的问题。如果问题依旧存在,请检查crontab日志和系统的详细错误信息以获取更多线索。

回到顶部