FreeBSDのcrontabでカールが機能しないスクリプト

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)

オンラインで見つけた情報によると、これはクローン環境とユーザーの違いによるものです。この問題を解決できる変数は表示されません。

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

特にコピーしないと、シェルは で動作しません/bin/bash。 FreeBSDベースシステムは同様に機能しません。bashFreeBSDパッケージシステムからインストールすると、次のようにインストールされます/usr/local/bin/bash (参照)。hier(7)手動FreeBSD ディレクトリ階層のレイアウトに関する情報を表示するには)

これは、cronがスクリプトを実行しようとするとスクリプトを実行するためのシェルを起動できず、失敗することを意味します。

手動で実行している場合は(現在機能している)シェルを使用してください。

通常、crontabを設定するときに必要な場合を除き、環境を上書きしないでください(たとえば、パスが難しい場合があります)。

関連情報