gpt4 book ai didi

bash - 从 crontab 中调用执行期望的 bash 脚本

转载 作者:行者123 更新时间:2023-12-04 19:21:07 24 4
gpt4 key购买 nike

我有一个 bash 脚本转储一些数据库并 gz 它们。然后它调用expect脚本,使用scp(专门为此目的创建的特定用户)将文件传输到备份服务器。这是一个 bash 脚本:
backupbases.sh文件:

#!/bin/bash
today=$(date +"%Y-%m-%d")
dumpPath=/home/mbackup/
remotePass=thereispassword

for db in $(mysql -e 'show databases' -s --skip-column-names); do
dbname=$db
if [ $dbname == "somedatabasename" ]; then
fname=$today"-mr1a-"$db".gz"
if [ -x $dumpPath$fname ]; then
rm $dumpPath$fname
fi
mysqldump $db | gzip -c > $dumpPath$fname
expect transfer.sh mbackup@server_address:/home/mbackup/$fname $dumpPath$fname $remotePass
#rm $dumpPath$fname
fi
done
tansfer.sh文件:
#!/usr/bin/expect -f

# connect via scp
set remote [lindex $argv 0]
set localpath [lindex $argv 1]
set password [lindex $argv 2]

spawn scp $localpath "$remote"
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "$password\r"
}
}
expect eof

困扰我的一件事是密码以 # 结尾。可以解释为注释但调用 backupbases.sh 的符号在控制台中导致成功执行 bash/expect。不幸的是,当 crontab 调用它时 - 只有 bash 部分被执行。数据库已转储,但文件未传输。当然会提供密码和服务器地址。

如何解决?

最佳答案

尝试将 expect 的输出记录到日志文件中,以便您可能知道它出了什么问题。还要很好地引用您的论点,以防止与空格分开。

( expect transfer.sh "mbackup@server_address:/home/mbackup/$fname" "$dumpPath$fname" "$remotePass"; ) >/path/to/log/file 2>&1

顺便说一下,我建议使用 .exp 的文件扩展名而不是期望脚本。

关于bash - 从 crontab 中调用执行期望的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18976119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com