如果我通过 crontab 运行脚本,gzip 无法正常工作。如果我手动运行同一脚本,gzip 就可以正常工作。
我们的脚本中的命令是
gzip -vf $path/file.eee
在我的脚本中,我生成一个格式为的日志文件.exp
,然后尝试使用 gzip 命令对其进行压缩
gzip -vf $PATH/file.exp
在此之后,我希望file.exp.gz
gzip 能够成功但失败了,我看到 gzip 状态返回 141。除了 gzip 之外,这个脚本运行良好,其他命令也运行良好。
$PATH
是路径file.exp
。我将其复制file.exp
到/root
文件夹。在根文件夹中,我放置了一个具有gzip -vf /root/file.exp
命令的测试脚本。我将此测试脚本添加到 crontab 中,它运行良好。完成 crontab 后,我在根文件夹中看到了输出,我可以看到file.exp.gz
文件。在 crontab 中,我给出了正确的用户和命令。
答案1
退出代码:
在退出值中,大于 128 的值表示由于信号而终止,大于 128 的数值表示哪个信号导致终止。因此,如果我们从 OP 的退出代码 141 中减去 128,我们会得到 13,它对应于 SIGPIPE(man 7 signal
用于标准信号及其对应整数值的列表)。
手册页将 SIGPIPE 的评论列为“管道损坏:向没有读取器的管道写入”。
多变的:
您真的使用$PATH
/$path
吗?
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/bin
echo $path
/usr/local/sbin /usr/local/bin /usr/bin
关于 cron 任务:
Cron 作业在最小环境下运行。$PATH
在 cron 和 shell 会话中有所不同。
根据您的信息部分答案:
我猜想,$PATH
您的 shell 会话中的最后一个条目包含您的脚本的路径。file.exp
是在此路径中创建的。