这是我的预期脚本,名为 script.exp,从终端执行时可成功运行。但通过 cronjob 调度时不会运行。
#!/usr/bin/expect -f
set timeout -1
spawn ./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
谢谢
答案1
通过 运行的作业cron
不会在与桌面相同的运行时环境中运行。您的任何PATH
更改或其他环境变量设置都~/.bashrc
不会自动传播到您的cron
作业中。例如,没有$DISPLAY
,因此 GUI 程序需要特殊处理(阅读man xhost
)。
cron
人们可以在crontab
文件 Read中为所有作业设置环境变量man 5 crontab
。
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。
由于command
该行的一部分crontab
默认由 解释/bin/sh
,其语法比 更简单/bin/bash
,因此我建议command
调用一个bash
脚本(可执行、已安装、以 开头#!/bin/bash
)来设置环境,然后调用所需的程序。