2010-08-26 23 views
0

Je peux lancer ce script expect très bien en utilisant root ou mon propre compte utilisateur, mais quand je l'exécute avec cron, je reçois toujours une erreur. L'OS est Ubuntu 8.04.Pourquoi ce script expect génère-t-il une erreur lorsqu'il est exécuté par cron?

email d'erreur est la suivante,

Date: Thu, 26 Aug 2010 11:50:01 -0400 
From: [email protected] (Cron Daemon) 
To: [email protected] 
Subject: Cron <[email protected]> /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) 

Le script 'uploadmyip' est comme suit,

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

Le script expect ftpxfer est comme suit,

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

La sortie de "sudo crontab -l"

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

Je viens de réaliser que Superuser aurait pu être un meilleur forum pour ça. – grokus

Répondre

2

La réponse est que sur votre système, cron ne définit pas la variable d'environnement USER - cron utilise un environnement très minimal. Vous pourriez avoir plus de chance en utilisant la variable d'environnement LOGNAME.

+0

Vous avez raison monsieur, je viens de tester et LOGNAME a fonctionné. Merci. – grokus