![了解 Cron 的输出](https://linux22.com/image/1182671/%E4%BA%86%E8%A7%A3%20Cron%20%E7%9A%84%E8%BE%93%E5%87%BA.png)
我无法理解 的输出cron
。假设我有一个每五分钟运行一次的 cronjob:
*/5 * * * * root /home/user/Desktop/shell.sh
shell.sh
包含以下内容:
#!/bin/bash
echo "hello"
bash -i
我有以下问题:
作业在哪里运行?例如,在运行 shell 脚本的地方是否启动了新的 TTY 进程?
输出发送到哪里?我读到输出发送到所有者的邮件。这是否意味着 root 会收到包含该
echo
语句的邮件?命令怎么样
bash
?脚本是否在其控制终端会话中启动 bash 进程,该进程一直运行直到终端会话结束(在脚本结束时?)?假设我已经逆向了上述 bash 脚本中的 shell 代码,并且
nc
在我的计算机上运行了一个监听器。这是否意味着每 5 分钟我都会收到一个连接,该连接会在脚本运行完成后立即关闭?
抱歉问了这么多问题。我对这方面还不熟悉。谢谢。
答案1
crontab
并不完全像传统的 shell 那样工作。
该作业以 root 身份运行,但没有任何 TTY。该命令在非交互式环境中运行,因此
bash -i
可能返回错误或在执行后关闭。输出通常通过邮件发送。Ubuntu 通常附带一个非常小的邮件系统,名为
exim4
。查看文件是否/var/mail/<your username>
存在。您可以尝试使用以下命令阅读邮件:mail -u <your username>
由于您的脚本以 开头
#!/bin/bash
,bash
因此将被使用,但这不会在任何终端中运行。除非您的脚本包含循环,否则该过程会在脚本结束时结束。我不确定我是否理解了的用例
nc
,但如果您nc
从运行crontab
到连接并向您的计算机发送消息,nc
并且bash
将在命令完成后立即结束。