【问题标题】:expect script not working in cron but runs successfully in terminal期望脚本在 cron 中不起作用,但在终端中成功运行
【发布时间】:2021-12-15 23:13:23
【问题描述】:

这是我的期望脚本,名为 script.exp,从终端执行时成功运行。但是通过cronjob调度时它不运行。

#!/usr/bin/expect -f
set timeout -1
spawn /home/user1/sql_backup.sh
match_max 100000
expect -exact "Enter password: "
send -- "pass123\r"
expect eof

我的名为 sql_backup.sh 的 bash 脚本是:

#!/bin/bash
mysqldump -u root -p --all-databases > /home/user1/mysql/mysql-bkp.sql

我的 cronjob 是:

* * * * * /usr/bin/expect -f /home/user1/script.exp

谢谢

【问题讨论】:

  • 对脚本中的所有可执行文件使用绝对路径,或者通过 cron 条目定义/设置 PATH。
  • @Jetchisel :我认为设置PATH 不会影响脚本的启动,因为如果通过提供相对路径启动程序,则不会使用 PATH 变量。当然,不正确的 PATH 设置可能会影响调用的 shell 脚本中发生的事情。
  • @user1934428,对了,我忘了补充一点,如果您设置了 PATH,则不要将 ./ 用于可执行文件。
  • @user1934428 两个脚本都在同一个目录中。我也尝试过设置完整路径。它不能与 cronjob 一起运行。但是从终端执行时运行成功。

标签: bash cron scripting expect


【解决方案1】:

脚本的工作目录不包含sql_backup.sh。做一个

cd /home/user1

(或存储您的 Shell 脚本的任何位置)。有关 Tcl cd 命令,请参见 here

【讨论】:

  • 两个脚本都在同一个目录中。我也尝试过设置完整路径。它不能与 cronjob 一起运行。但是从终端执行时运行成功。
  • 脚本是否在同一目录中无关紧要。我说你需要确保工作目录设置正确。
  • @NitinKumar:而且,如果您确实在脚本中放置了完整路径,请更新您的问题,以便人们可以看到您是如何做到的。最后,doesn't run 是一个无法使用的错误描述。这是什么意思?如果出现问题,您通常会收到一些错误消息。我在您的帖子中没有看到您会从您的 cron 作业中收集错误日志。那么你将如何调试问题呢?
  • 我在日志中看不到任何错误 Nov 1 11:10:01 bitsify CRON[102105]: (root) CMD (/usr/bin/expect -f /home/user1/script. exp) 11 月 1 日 11:10:01 bitsify CRON[102104]: (CRON) 信息(未安装 MTA,丢弃输出) Nov 1 11:11:01 bitsify CRON[102111]: (root) CMD (/usr/bin/期望 -f /home/user1/script.exp)11 月 1 日 11:11:01 bitsify CRON[102110]:(CRON)信息(未安装 MTA,丢弃输出)11 月 1 日 11:12:01 bitsify CRON[102121]: (root) CMD (/usr/bin/expect -f /home/user1/script.exp) Nov 1 11:12:02 bitsify CRON[102119]: (CRON) 信息(未安装 MTA,丢弃输出)
  • @NitinKumar 将您的 crontab 更改为 * * * * * /usr/bin/expect -f /home/user1/script.exp > /tmp/crontab.log 2>&1 您应该能够在 /tmp/crontab.log 中看到一些消息
猜你喜欢
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 2011-01-24
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多