【发布时间】:2023-03-06 20:51:01
【问题描述】:
我正在尝试让云服务器(从我保存的图像构建)在启动时从 URL 执行脚本,但该脚本未正确执行。
我使用来自Execute bash script from URL 的答案之一来配置 curl 脚本,并通过 crontab (Ubuntu 14.04) 中的 @reboot 指令执行该脚本。我的设置如下所示:
脚本包含以下命令:
user@cloud-server-01:~$ cat startup.sh
#! /bin/sh
/usr/bin/curl -s http://192.168.100.59/user/startup.sh.txt | bash /dev/stdin
我通过 crontab 调用脚本:
user@cloud-server-01:~$ crontab -l
@reboot /home/user/startup.sh > startup.log 2>&1 &
如果我使用完全相同的命令从命令行手动执行脚本,它工作正常。但是,在启动时由 crontab 执行,它似乎挂起,我看到以下进程正在运行:
user@cloud-server-01:~$ ps ux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 1287 0.0 0.1 4444 632 ? S 19:17 0:00 /bin/sh /home/user/startup.sh
user 1290 0.0 0.7 89536 3536 ? S 19:17 0:00 /usr/bin/curl -s http://192.168.100.59/user/startup.sh.txt
user 1291 0.0 0.2 12632 1196 ? S 19:17 0:00 bash /dev/stdin
我是否遗漏了一些明显的东西,为什么 cron 执行没有给我与命令行相同的结果?
编辑:
感谢 Olof 重定向我的故障排除。事实上,curl 正在执行,如果我等待足够长的时间(几分钟),它似乎可以按需要运行。我怀疑问题是最初调用 curl 时网络接口和/或 URL 不可用,虽然它可能会轮询连接,但它可能会退回其轮询间隔。所以现在的问题变成了,“我如何在调用 curl 之前检查我是否与这个 URL 建立了连接?”
【问题讨论】: