代码之家  ›  专栏  ›  技术社区  ›  grokus

为什么这个expect脚本在由cron运行时会出现错误?

  •  0
  • grokus  · 技术社区  · 14 年前

    我可以使用root或我自己的用户帐户运行这个expect脚本,但是当我使用cron运行它时,总是会出现错误。操作系统是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)
    

    #!/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
    

    expect脚本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
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Bryan Oakley    14 年前

    答案是,在您的系统上,cron没有设置用户环境变量——cron使用的环境非常小。使用LOGNAME环境变量可能会更幸运。