使用 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
替换为*/30
或0,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,无需用户交互的主要内容,如果未能解决你的问题,请参考以下文章