Unix Expect命令在cron中未完成

Unix Expect命令在cron中未完成,unix,cron,expect,Unix,Cron,Expect,我有以下脚本从远程服务器复制文件。当我手动运行作业时,它运行良好。 当我通过cron运行文件时,它会在两者之间中止(仅复制文件的一部分,文件大小约为1GB) 未创建任何错误日志 #!/bin/bash SCRIPT_NAME=asda_email_success_log.sh LOG_FILE=/home/xxxxxxx/logs/$SCRIPT_NAME'_'`date '+%Y%m%d_%H%M%S'`.log ERROR_FILE=/home/xxxxxxx/logs/$SCRIPT_NA

我有以下脚本从远程服务器复制文件。当我手动运行作业时,它运行良好。 当我通过cron运行文件时,它会在两者之间中止(仅复制文件的一部分,文件大小约为1GB)

未创建任何错误日志

#!/bin/bash
SCRIPT_NAME=asda_email_success_log.sh
LOG_FILE=/home/xxxxxxx/logs/$SCRIPT_NAME'_'`date '+%Y%m%d_%H%M%S'`.log
ERROR_FILE=/home/xxxxxxx/logs/$SCRIPT_NAME'_'`date '+%Y%m%d_%H%M%S'`.error

date=`date +%Y-%m-%d`
echo 'Current date is ' $date
date_minus_1day=$(date -d '-1 day' '+%Y-%m-%d')
echo 'Date minus one day is :', $date_minus_1day
set timeout 1800

expect -c "
spawn sftp -oPort=xxxx wmasdaftp@xxx.xxx.x.xx
expect \"Password\"
send \"xxxxxxxxxxxxx\r\"
expect \"sftp>\"
send \"get log/success.log.processed-$date_minus_1day /home/xxxxxxxx/xxxxxxs/\r\"
expect \"sftp>\"
send \"bye\r\"
interact"

是不是应该由
expect
运行
设置超时1800
?因为它不在这里。它是由shell运行的,而不是执行您可能希望它执行的操作。在我将设置的时间设置为1800之前,当我手动运行它时,它已收支平衡。设置超时后,当我手动提交作业时,它至少会完全复制文件。我同意超时可能只由shell以这种方式运行。不确定,如何把它放在期望中。我希望其他两个作业能够成功运行,因为文件大小较小。在shell中运行,就像
set timeout 1800
设置
$1=timeout
$2=1800
那样,不会以任何方式影响
expect
的运行。如果在expect中运行该函数,那么它会将
expect
timeout设置为该值,并会影响事情。要在expect中运行它,请将其粘贴到正在运行的expect命令中。(对大多数命令使用单引号将极大地简化字符串,并使您无需转义每个双引号。)@Manic,虽然您无法按需要格式化注释,但这看起来是正确的。我会将无限超时作为expect正文的第一行:
settimeout-1
使用ssh公钥会简单得多。另外,您是否可以使用
scp
而不是
sftp