Scripting

env 在 FreeBSD cronjob 中不工作

  • March 21, 2016

在我的 FreeBSD 伺服器上,我使用 Duplicity 設置了一個用於備份的 cron 腳本。該腳本如下:

#!/bin/sh

export PASSPHRASE=
export FTP_PASSWORD=

keyid=
remote=
excludelist=

/usr/local/bin/duplicity --volsize 1000 --max-blocksize=20480 --asynchronous-upload --full-if-older-than 1M --encrypt-key "$keyid" --exclude-filelist "$excludelist" /Data "$remote"

/usr/local/bin/duplicity --force remove-all-but-n-full 1 "$remote"

unset FTP_PASSWORD
unset PASSPHRASE

(當然,敏感數據已編輯)。

該腳本位於 /etc/periodic/daily/duplicity 並且如果我直接從終端執行它可以正常工作。但是當 cron/periodic 執行它時它不起作用,這似乎是因為env執行不正常。

最初,腳本的 hashbang 讀取#!/usr/bin/env sh,但導致錯誤env: sh: No such file or directory。所以我把它改成了sh的直接路徑。

我目前遇到的問題是重複性在env內部使用。所以目前,env: python2: No such file or directory當 cron 嘗試執行它時,我得到了錯誤。

為什麼env在 cronjobs 中不起作用,我該如何解決?

正如 Amiramix 所暗示的,問題出在環境變數上。更具體地說, 的值PATH

/etc/crontab包含以下行:

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

在我添加之後/usr/local/bin,我的腳本按預期工作。

引用自:https://serverfault.com/questions/764784