带有curl的脚本在FreeBSD上的crontab中不起作用

带有curl的脚本在FreeBSD上的crontab中不起作用

我有bash脚本:

#!/usr/local/bin/bash

/usr/local/bin/curl ifconfig.io --interface tun15071 -m 15 -w "%{http_code}\n" > /home/user/out

...以及以下 crontab:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
* * * * * /home/user/cron_ch.sh

Cron 完成这项工作,但它不会更改文件如果我从控制台手动运行脚本,文件将会更改

克朗日志:

Aug  5 09:57:00 GAME2 /usr/sbin/cron[66337]: (user) CMD (/home/user/cron_ch.sh)

网上查到的资料说,这可能是由于cron的环境和用户的不同造成的。我没有看到任何可以解决这个问题的变量

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
TERM=xterm
MAIL=/var/mail/root
LOGNAME=root
USER=root
USERNAME=root
HOME=/root
SHELL=/bin/csh
SUDO_COMMAND=/usr/bin/su
SUDO_USER=user
SUDO_UID=1022
SUDO_GID=1022
HOSTTYPE=FreeBSD
VENDOR=amd
OSTYPE=FreeBSD
MACHTYPE=x86_64
SHLVL=1
PWD=/home/mateo
GROUP=wheel
HOST=name
REMOTEHOST=255.255.255.255
EDITOR=vi
PAGER=more
BLOCKSIZE=K

用户没有来自 cron 的邮件。 Cron 为其他用户执行任务。

答案1

您的 cron 条目显示您将SHELL变量设置为/bin/bash

除非您专门将其复制到那里,否则 shell 将无法作为/bin/bash. FreeBSD 基本系统没有bash,如果您从 FreeBSD 软件包系统安装它,它会安装为/usr/local/bin/bash (请参阅手册hier(7)有关 FreeBSD 目录层次结构布局的信息)。

这意味着当 cron 尝试运行您的脚本时,它将无法启动 shell 来运行它,并且会失败。

当您手动运行它时,您将使用(当前正在工作的)shell。

一般来说,除非绝对必要,否则在配置 crontab 时尽量不要覆盖任何环境(是的,有时路径可能很痛苦)。

相关内容