0

root または自分のユーザー アカウントを使用してこのスクリプトを正常に実行できますが、cron で実行すると、常にエラーが発生します。OSはUbuntu8.04です。

エラーメールは以下の通り、

Date: Thu, 26 Aug 2010 11:50:01 -0400
From: root@supa (Cron Daemon)
To: root@supa
Subject: Cron <root@supa> /home/myusername/bin/uploadmyip

myserver.com
can't read "env(USER)": no such variable
    while executing
"puts $env(USER)"
    (file "/home/myusername/bin/ftpxfer" line 8)

スクリプト「uploadmyip」は次のとおりです。

#!/bin/bash
wget -O /dev/stdout http://checkip.dyndns.com/ 2> /dev/null > /tmp/myip.txt && /home/myusername/bin/ftpxfer && chmod 777 /tmp/myip.txt

期待スクリプト ftpxfer は次のとおりです。

#!/usr/bin/env expect

if { [lrange $argv 0 0] == ""} {
}

set server myserver.com
puts $server
puts $env(USER)
system "echo "
system pwd
set timeout 5
spawn -noecho ftp $server
expect {
        timeout {puts "ftp to $server timed out"; exit}
        "Name ($server:$env(USER)):"
        }
set timeout 300
send "username\r"
expect "Password:"
send "password\r"
expect "ftp>"
send "binary\r"
expect "ftp>"
send "put /tmp/myip.txt myip.txt\r"
expect "ftp>"
send "^D\r"

「sudo crontab -l」の出力

$ sudo crontab -l
# m h  dom mon dow   command
50 *    * * *   /home/myusername/bin/uploadmyip
4

1 に答える 1

2

答えは、あなたのシステムでは cron が USER 環境変数を設定していないということです。cron は非常に最小限の環境を使用します。LOGNAME 環境変数を使用すると、もっとうまくいくかもしれません。

于 2010-08-26T16:59:53.313 に答える