【问题标题】:Shell script does not run completely when runs by cron由 cron 运行时,Shell 脚本无法完全运行
【发布时间】:2022-06-16 18:03:59
【问题描述】:

文件 modBackup.sh 中的脚本在由 cron 启动时没有完全运行,如果我手动运行,结果是一个损坏的 tar.gz 文件,它的大小只有这个文件的一半。无论如何,它的大小比手动启动的要小很多倍,但仍然会创建一些无法正常打开的内容,存档损坏

文件modBackup.sh:

 #!/bin/sh
    find /home/share/ -mmin -720 -type f -exec tar -rvf /mnt/archives/`date +%F`-modified.tar.gz "{}" +

Т他的自动行为似乎被打断并且没有结束。 当我手动运行它时,脚本会创建一个真正的存档为 [当前日期]-modified.tar.gz

这里是 crontab -e:

00 18 * * 1-5 /home/myScripts/modBackup.sh

编辑: 除了 crond 已经启动,日志中没有任何信息 既不在邮件日志中,也不在 cron 中,也不在消息中 (我使用非常旧的 CentOS :( 但我认为这不是错误的原因)。 仅用于测试:我在脚本中添加了文件名的 %H%M 并执行了以下操作: 我手动运行它:sh /home/myScripts/modBackup.sh 并设置crontab -e 以在两分钟后运行相同的命令

几分钟后,出现了两个同时增长的文件,然后是 cronjob 创建的一个 停止生长 (two files)。 在这两种情况下,我都使用相同的 GUI 工具(存档管理器)打开。 Т通过手动启动脚本创建的文件打开(manually started),但另一个来自cronjob的文件无法打开,即使我更改了扩展名,错误是'unexpected EOF in archive'(auto started)

【问题讨论】:

  • syslog 显示了关于 cron 工作的什么信息?请edit您的问题以添加所需信息,请勿为此目的使用 cmets。
  • 您可能在控制台上有you have new mail 消息或在journalctl 上有错误消息。检查一下,它可能包含 cronjob 上的错误。
  • 手动执行时是否调用了这个确切的脚本?这是一个 .tar 文件,被误命名为 .tar.gz,因此它可能比等效的 .tar.gz 文件大得多,并且某些工具可能由于扩展名错误而无法处理它。

标签: linux shell cron centos script


【解决方案1】:

建议在$PATH 和其他关键环境变量中包含用户的环境上下文以使应用程序正常工作。:

modBackup.sh:

#!/bin/sh

source ~/.profile
find /home/share/ -mmin -720 -type f -exec tar -rvf /mnt/archives/`date +%F`-modified.tar.gz "{}" +

【讨论】:

  • 我建议在您的回答中解释为什么此更改会有所帮助。
  • 此更改只是帮助缩小可能原因范围的一个示例,仅用于调试目的,如果它在某些方面有所帮助
【解决方案2】:

我发现在 cron 环境中,“find”命令会误解包含特定字符的文件名,即使在脚本行开头使用 add 显式更改编码“export LANG = en_US.UTF-8; LC_CTYPE= ……”。通过许多其他组合和尝试,我没有成功。 这就是为什么我离开了“查找”命令并使用带有选项的 tar 命令来归档修改过的文件。这种方式现在很完美:

fromDate = $ (date --date = '15 hours ago')

/bin/tar -N "$ fromDate" -zcf /mnt/archives/date +% F-% H% M-share.modified.tar.gz/home/share/

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 2011-06-25
    • 2021-04-23
    • 2011-08-10
    • 2015-08-16
    • 2011-01-01
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多