使用 smbclient 将文件从 Linux 推送到 Windows 时出现问题

使用 smbclient 将文件从 Linux 推送到 Windows 时出现问题

我的 Linux 机器上有一个由 Python 脚本生成的文件,该文件被放在 /root/ 目录中

我的 bash 脚本如下所示:

#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
# the file created here will land one directory above the scripts in /root/
python main.py     

# Transfer the file to the server
cd /root/
smbclient \\\\[SERVER]\\[SHARE] --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'

直到最后一行,一切都按预期运行。它一定是执行时出错了(尽管我不太清楚如何找出错误是什么)。

此作业从 crontab 运行。据我所知,它的运行环境与 root 略有不同(或至少其行为方式似乎如此)。

如果我直接执行脚本(而不是从 crontab 执行),它会顺利运行,文件会传输到目标 Windows 服务器框。我猜我可能需要在 put 命令中提供 HRDataFeed.txt 文件的完整路径;但是,我似乎无法弄清楚。

smbclient .... -c "put /root/HRDataFeed.txt"

导致文件错误/root/HRDataFeed.txt找不到。

非常感谢您的任何意见。

编辑

我尝试更新我的 crontab 来读取(为了测试,我让它每分钟运行一次)

          • /root/hrdatafeed>last_run.txt

然而,文件中似乎没有任何内容。

我将尝试直接向 SMBClient 命令添加管道。

答案1

/usr/bin/sendmail当命令失败时,Cron 会尝试发送邮件(使用)——这是我所知道的获取脚本实际输出的唯一方法(你可以安装SMTP协议以使其相当容易地工作)。 cron 环境中的主要区别通常是,因此请尝试在 crontab 中$PATH设置适当的,其中包括目录。PATHsmbclient

答案2

我最终稍微重写了脚本,如下所示:

#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
python main.py

# Transfer the file to the server
cd /root/
/usr/bin/smbclient \\\\[SERVER]\\HRDataFeed --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'

我将 crontab 改成这样:

          • sh /root/hrdatafeed.sh > /root/last_run > 2>&1

最后终于能够在最后一个运行文件中获取一些有意义的消息。虽然没有错误,但我认为这是因为我更改了 smbclient 命令的完整路径。

感谢大家为解决这个问题提供的帮助。

现在我当然会更新 cron 标签,让它以较低的频率运行;)

相关内容