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