使用 crontab 运行用户交互式 cmd,无需用户交互

Posted

技术标签:

【中文标题】使用 crontab 运行用户交互式 cmd,无需用户交互【英文标题】:Running a user interactive cmd with crontab without user interaction 【发布时间】:2015-04-03 08:53:32 【问题描述】:

我有一个带有 2 个参数的命令。

当我手动运行命令时,我是这样做的:

cmd -i xyz.dat 
hit enter
enter password in the prompt
hit enter
confirm password

命令运行成功。

当我在 crontab 中执行此操作时,每 30 分钟运行一次,如下所示:

30 *  *  *  * /$HOME/cmd -i xyz.dat mypwd   mypwd

cmd-脚本在我手动运行时需要用户交互(输入密码)。 您能否帮助我如何在没有用户交互的情况下运行 crontab 作业?

感谢您的帮助!

【问题讨论】:

不是每 30 分钟运行一次;它每小时运行一次,每小时 30 分钟。将30 替换为*/300,30。看起来您的命令提示输入密码。从 cron 作业中输入密码会很棘手。您可以修改 cmd 以将密码作为命令行参数,但这是不安全的,因为您的 crontab 中必须以明文形式提供密码。 我不知道cmd 做了什么,除了它显然以交互方式读取密码。我不知道它是从标准输入、/dev/tty 还是通过其他机制读取的。我想您仍然需要以某种方式向cmd 提供密码,但是没有足够的信息来说明更具体的内容。 我尝试运行的命令是 gsa_logger -i login.dat 当我按下回车键时,它会提示输入密码,再次输入会提示密码确认。 我不知道gsa_logger 是什么。我认为您的真正问题更多是关于以非交互方式运行gsa_logger,而不是关于 crontab。我建议更新问题。 (不要假设人们会在 cmets 中看到信息。) 让我们continue this discussion in chat. 【参考方案1】:

我的两个建议是:

    尝试将密码回显到脚本(手动)以查看该命令是否会从标准输入读取密码。您可以将密码隐藏在包装脚本中(无论如何,不​​要将其置于 cron 之外)。

    使用 expect 来提供输入

【讨论】:

以上是关于使用 crontab 运行用户交互式 cmd,无需用户交互的主要内容,如果未能解决你的问题,请参考以下文章

CRONTAB

[CentOS 7系列]系统服务管理

crontab定时任务配置

crontab 没有运行 ruby​​ 脚本

crontab用法

lunux定时任务