假设我正在通过crontab -e
以下方式运行 C 程序:
15 11 * * * time /home/philip/school/a1_c_program.c > /home/philip/logs/time2execute.txt
Run Code Online (Sandbox Code Playgroud)
但是 C 程序要求用户输入一些文本。
在这种情况下会发生什么?在我重新启动之前,C 脚本是否只是在我的机器上保持一个打开的进程?或者它会在一段时间后自动关闭?
如果我可以附加到进程并输入所需的文本, time 命令是否会完成运行并将某些内容打印到新创建的文本文件中?
我注意到上面的 cronjobtime2execute.txt
文件已创建但为空。
编辑:一旦我修复了我的 crontab 以指向编译的 c 程序而不是源文件。文本文件包含用户会看到的提示文本。
pet*_*erh 14
由 cron 守护程序运行的工具从cron
,而不是从您的 shell获取环境。在cron
没有这些工具提供了标准输入,更确切地说它提供了从一个伪造的一个/dev/null
设备。
因此,如果该工具需要标准输入,它会在尝试读入输入数据时出现文件结束错误。这取决于工具,它将用它做什么。在大多数情况下,它与您通过使用
programname </dev/null
Run Code Online (Sandbox Code Playgroud)
如果它试图直接读取终端,比如ncurses
应用程序,那么它的终端初始化序列将不起作用。的ncurses_init()
通话将赋予它一个错误的结果。在这种情况下,它还取决于工具对错误结果的处理方式。大多数工具只是退出并显示错误消息。这取决于cron
配置,它将如何处理此错误消息(默认情况下,它会记录并通过电子邮件发送给您)。
旁注:您的cron
线路不好,您尝试.c
直接运行源代码。首先,您必须将其编译为二进制可执行文件。此外,时间工具将其输出放入标准错误输出,您最好将其输出(以及其 std 错误)重定向到某个日志文件。