SCP 无法在 CRON 作业中工作,只能手动

SCP 无法在 CRON 作业中工作,只能手动

我在远程服务器 (bServer) 上有一个脚本,该脚本通过 SSH 连接到中央服务器 (我们称之为 cServer),并启动一个脚本,该脚本进一步通过 SSH 连接到其他 2 个服务器 (server13 / server14)。每个服务器上都运行一个脚本,生成一个文件。

我已从 cServer 到 server13/14 设置了 DSA SSH 密钥。cServer 将从 server13/14 提取生成的文件,然后 bServer 将从 cServer 提取这些文件。

手动运行时,效果很好。

但是,当我在 bServer 上安排作业时cron,来自 server14 的文件不会被拉到 cServer 上。

以下是更有趣的内容:来自 server13 的文件不转移从 cServer 到 bServer 时ssh 或者 scp对 server14 的命令存在于同一个脚本中。

如果我将它们放在单独的脚本中,server13 的文件可以正常返回到 bServer,但 server14 的文件仅制作,而根本没有传回cServer。

server13 和 server14 都运行相同版本的 SunOS。

我读过很多针对类似问题的不同解决方案,但没有找到任何解决方案。

关于如何解决这个问题有什么想法吗?

答案1

通过 cron 执行作业时,您不会保留环境。如果您已经以拥有 cron 脚本的用户身份登录到远程服务器,出于诊断目的,您可能希望尝试通过命令确实如此。

如果您已将命令放在名为 my_script 的可执行脚本中,则以下命令

 at -f my_script 0936.00

将在 9 小时 36 分钟时执行命令 my_script。如果成功,您就会知道在 cron 中缺少了环境中的一些基本组件。

答案2

问题可能出在 使用的环境变量上。从和 从cron运行“env > out.txt”并比较结​​果。cronshell

看看这个解决方案https://stackoverflow.com/questions/2229825/where-can-i-set-environment-variables-that-c​​rontab-will-use

source /etc/profile您可以尝试在脚本开头添加。您也可以尝试使用以下命令运行脚本#!/bin/bash -l

答案3

所有建议的解决方案均无效。

为了解决这个问题,我不得不设置 2 个独立的 cron 作业。一个作业将文件从 server14 拉到 server13,然后再拉回到 bServer。第二个 cron 作业(如果在同一作业中作为第二个脚本运行,则不起作用)将从 server13 拉取文件。

非常奇怪。可惜我找不到更优雅的解决方案。

相关内容