Cron Job 中 SFTP bash 脚本的日志记录问题

Cron Job 中 SFTP bash 脚本的日志记录问题

我有这个的变体问题还有一些额外的细节。我的脚本由 cron 作业运行,但它没有执行 SFTP,也没有像我希望的那样记录。当我检查它应该将文件发送到哪里时,它们不在那里。这些文件只有在我手动运行时才会出现在那里,而在 Cron 作业中运行时则不会出现。

我有两次记录尝试:

首先在 cron 作业本身中(我已经尝试过我的用户和“root”):

15 17 * * * nw /bin/sh /home/nw/scripts/SftpScriptLoop.sh >> /home/nw/scripts/SftpScriptLoop_cron.log 

其次在脚本中记录log.txt。

当我自己运行脚本时,log.txt 会被填充,但是当我使用 Cron 作业运行时它永远不会被填充。

我知道 cron 任务正在运行,因为 SftpScriptLoop_cron.log 已创建,但它是空的。我删除了它,然后再次测试以验证。

我在脚本中使用完全限定的磁盘路径。

我的 Bash 脚本(它使用“此处文档”将数据传递到 SFTP 命令的标准输入):

#!/bin/bash
for filename in /home/nealwalters/downloads/*.csv; do 
   currentDate=`date` 
   echo "Loop: Filename=$filename" 
   echo "$currentDate SFTPUser3 Filename=$filename" >> /home/nealwalters/scripts/log.txt

   sftp -i /home/nealwalters/keys/SFTPUser1_Private.pem [email protected] << EOF
      cd User3ToMyCompany
      put $filename
      exit
EOF
   echo "--------------------------------------------"
done

Ubuntu 20.04

“grep CRON /var/log/syslog” 的结果。

在此处输入图片描述


第 2 部分 - 如有疑问,请简化。一天后更新。

我喜欢这个答案问题,但我甚至无法让下面的工作。

我创建了三个包含一些虚拟文本的文件:TouchFileScript1.txt、TouchFileScript2.txt 和 TouchFileCron.txt

我创建了一个 bin 目录(不确定是否需要,因为我最初的目录名是“scripts”。)

我创建了一个名为 TouchFileCron1.sh 的 bash 脚本,其中只有以下一行:

touch /home/nealwalters/bin/TouchFileScript1.txt 

我创建了一个名为 TouchFileCron2.sh 的 bash 脚本,其中只有以下一行(试图确定 crontab 中是否需要 /sh/bin):

touch /home/nealwalters/bin/TouchFileScript2.txt 

/etc/crontab 现在有以下两行:

* *  * * * root touch /home/nealwalters/bin/cronlog.txt 
* *  * * * root /home/nealwalters/bin/TouchFileScript1.sh
* *  * * * root /bin/sh /home/nealwalters/bin/TouchFileScript2.sh 

基本上第一个可以行,后两个不行。

结果 - /var/log/syslog 的尾部 - 并列出我的所有文件。您可以看到哪些文件被标记为可执行文件。TestFileCron.txt 的日期/时间每分钟更改一次。其他两个不受影响。

既然我在 crontab 中运行的是“root”,那么所有权是否重要?我截屏时,cron 最后一次运行的时间是 17:28。其他文件仍处于我创建它们的 17:22。

在此处输入图片描述

答案1

由于我将输出重定向到文件,我认为我的情况有所不同,但它基本上通过这篇文章得到了解决: 系统日志中出现“(CRON) 信息(未安装 MTA,丢弃输出)”错误

我没有对“stderr”进行任何重定向。

我有 Windows 背景,因此对于我来说,邮件用于记录错误而不是将其写入文件真是令人难以置信。

Linux 使用邮件向用户发送通知。大多数 Linux 发行版都安装了邮件服务,其中包括 MTA(邮件传输代理)。但 Ubuntu 没有。

您可以安装邮件服务(例如 postfix)来解决此问题。

sudo apt-get install postfix

然后查看错误:

sudo tail -f /var/mail/nealwalters

(其中 nealwalters 可以替换为您的用户)。

相关内容