运行 wget 作为 cron 作业

运行 wget 作为 cron 作业

我想将备份档案从一台服务器下载到另一台服务器。服务器有一个脚本,用于提供最新的备份档案,该文件针对每个日期都有特定的名称。我希望 wget 保留该名称。

当我跑步时:

wget -q --content-disposition 'http://server.example.com/get/latest'

它正是我想要的。我还可以用浏览器下载文件。

但是,当我将其放入 shell 脚本并尝试将其作为 cron 作业运行时,什么也没有发生。我没有看到任何错误/var/log/syslog

以下是整个 shell 脚本:

#!/bin/sh
wget -q --content-disposition 'http://bkp.www1.linux.local/get/latest'

我也尝试过#!/bin/bash,结果相同。

我究竟做错了什么?

答案1

你没有详细说明如何设置 cron 作业(用户范围、系统范围……)你确定 cron 条目格式正确吗(比如忘记了字段)?系统 cron 条目应该是这样的

0 1 * * 0 root /usr/bin/my-command

我重新表述man 5 crontab

field          allowed values
-----          --------------
minute         0-59
hour           0-23
day of month   1-31
month          1-12 (or names, see below)
day of week    0-7 (0 or 7 is Sunday, or use names)
user           user of the system
command        the command to run (should be executable)

如果您创建了用户 cron 条目,则crontab -e应该省略该user字段。

确保当前工作目录(执行脚本的位置)对脚本可写。查看https://unix.stackexchange.com/questions/38951/what-is-the-working-directory-when-cron-executes-a-job

答案2

告诉您的脚本写日志或进行一些自己的调试。下次运行时,您将得到所有答案。如果它没有像应该的那样进行调试,下一步就是责怪 cron。

我看你没有告诉你的脚本下载到哪里?也许你应该cd /some/path在 wget 之前告诉它?

我的最爱

如果您的系统可以发送电子邮件,请尝试MAILTO向您的 crontab 添加一个变量,以便任何输出(stdout/stderr)都可以发送到有用的地方。我以这种方式设置了每个服务器。

不再有 cron 秘密!

答案3

请通过如下方式添加权限来检查您的脚本是否可以执行:

# chmod +x <your_script_name>

接下来,通过以下方式检查该脚本是否可以在当前系统用户下执行:

# ./<your_script_name>

如果一切运行正常,您能否分享您的 cron 作业设置以供进一步检查?

相关内容