情况:我有一个 bash 脚本,旨在与 cron 一起运行。我在终端上测试了脚本,运行良好。当我将脚本配置为由 cron 执行时,脚本开始失败。
我花了很多功夫才发现脚本中的命令之一需要 TTY 才能运行,而 cron 的执行环境中没有提供这一功能。 (出于好奇:命令失败docker-compose
并显示消息the input device is not a TTY
)
问题:我仍然想找到一种方法,在为 cron 配置 shell 脚本之前从终端测试它们。有没有办法从终端运行 shell 脚本,就像它是由 cron 运行一样?喜欢cron run_my_command_now 'echo 123'
。或者可能只有一种方法可以从终端运行 shell 脚本,以便脚本认为没有终端?
答案1
IMO 最简单的方法可能是使用 ssh 和“-T”来禁用伪 TTY。
ssh -T localhost "command"
应该在没有 TTY 的情况下运行它。
答案2
请参阅 at(1) 手册页。
at -f /path/to/script_or_command now +5 min
或者类似的东西(EOT是Ctrl-D):
$ at 16:05
warning: commands will be executed using /bin/sh
at> source /my/environment/file
at> /path/to/script
at> <EOT>
job 1 at Mon Feb 14 16:05:00 2022