wget 在启动时将文件保存为纯文本文件

wget 在启动时将文件保存为纯文本文件

我在 crontab 中有一个运行 @reboot 的 bash 脚本:

该脚本本身包含一个 wget 命令,用于从互联网上提取和下载文件

当我登录并打开终端后运行脚本时,它可以正常工作并正确保存文件(html,png)。但是当我重新启动系统时,它会保存运行并保存为没有内容的纯文本文件。


解决了

--> 我使用了 crontab 中的睡眠功能,它有效!

刚接触 Linux 和代码,非常感谢您的所有反馈!我还将探索 /etc/network/if-up.d/ 选项。

答案1

问题是几乎当然,您的@rebootcron 作业在您的网络接口出现之前就已经开始了up一般来说,这是一个有据可查的缺点cron这并不意味着该@reboot设施毫无用处,只是意味着您需要了解它是如何工作的,以及当它失败时如何解决它 - 就像您的情况一样(大概:)。

至少有两种方法可以做到这一点:

  1. 在您的 @reboot 作业中使用sleep,为网络提供更多时间来获取up.您的crontab条目将如下所示::

@重新启动睡眠10; /你的/bash/脚本/现在

我建议这里的值10是给界面10秒的时间up; YMMV,所以尝试不同的值。

  1. 跟进 @confetti 的建议(并感谢 @Celada),将您的脚本放入/etc/network/if-up.d.以下是可能有用的原型。请注意,它仅在系统第一次启动时运行(例如@reboot,而不是每次网络接口启动时运行up):

#!/bin/sh

NWKSTATUS=/var/run/the-network-is-up

# 请注意 /var/run 是一个临时文件系统,因此系统关闭
# 将有效地删除我们的标志文件“the-network-is-up”

case "$IFACE" in
lo)
# 排除环回接口;我们不会考虑它
# 因为它不是一个真正的接口。我们仅
在真正的网络接口出现时设置该标志#
exit 0
;;
*)
;;埃萨克

# 如果标志文件存在,我们就完成了
# 否则,我们将创建它

如果 [ -e $NWKSTATUS ];然后退出 0
否则
触摸 $NWKSTATUS
fi

# 在这里添加你的脚本...

所以 - 将以上所有内容放入一个文件中(例如setnwkstatus.sh),然后将其保存在文件夹中/etc/network/if-up.d/并使其可执行(即sudo chmod /etc/network/if-up.d/setnwkstatus.sh

答案2

cron最有可能的问题是尝试运行脚本时网络接口未启动。

您可以让脚本在网络接口启动后运行。

将脚本放入/etc/network/if-up.d并设置chmod +x以便可以执行。每次网络接口出现时,其中的每个脚本都会被执行。

相关内容