Golang Go语言编译生成文件无法用 crontab 执行, sh -x 分析报错 cannot execute binary file, 命令行下可以执行
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
我把 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中无法执行,但在命令行下可以执行的问题,这通常是由于环境变量或路径设置不当导致的。以下是一些可能的解决步骤:
-
检查环境变量: crontab运行的环境变量可能与您的命令行环境不同。特别是
PATH
变量,它决定了系统查找可执行文件的路径。您可以在crontab中显式设置PATH
变量,例如:PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/path/to/your/go/bin
-
使用绝对路径: 在crontab任务中,直接使用Golang编译生成文件的绝对路径,以避免路径解析错误。
-
文件权限: 确保编译生成的文件具有可执行权限。您可以使用
chmod +x filename
来添加执行权限。 -
使用shell脚本包装: 编写一个简单的shell脚本,该脚本设置必要的环境变量并调用您的Golang程序。然后,在crontab中调用这个shell脚本。
-
调试crontab: 在crontab任务中加入输出重定向,将输出和错误信息写入文件,以便分析:
* * * * * /path/to/your/go/binary >> /path/to/logfile 2>&1
通过以上步骤,您应该能够定位并解决在crontab中无法执行Golang编译生成文件的问题。如果问题依旧存在,请检查crontab日志和系统的详细错误信息以获取更多线索。