linux 无法访问 crontab 上的 screen

标签 linux cron gnu-screen

我创建了一个 bash 文件,它在名为“cronscreen”的现有 screen 上执行 python 脚本。 bash 文件包含以下行:

screen -S cronscreen -X stuff "python test.py$(printf \\r)"

当我从命令行运行该文件时,它工作正常,当我附加“cronscreen”时,我看到输出被打印出来了。但是,我希望它在 cron 中运行,所以我按如下方式设置了 crontab:

* * * * * myuser /home/myuser/myscript.sh > /home/ec2-user/agg.log

cron 已执行,因为我可以看到文件 agg.log 每分钟重新生成一次,但是当我附加“cronscreen”时,我看不到那里打印任何输出(并且 agg.log 为空)。这是为什么?谢谢。

更新:

我也试过将脚本改成这个(重新连接 screen ),但没有改变:

screen -r cronscreen
screen -S cronscreen -X stuff "python test.py$(printf \\r)"

最佳答案

screen 需要一个 tty active 来创建一个 session ,这在 cron 下是不可用的。

您需要将它分成两部分,首先是运行 screen 并使其分离 - screen -dmS cronscreen 然后在您的 cronjob 中使用 -r cronscreen 附加到 screen session

关于linux 无法访问 crontab 上的 screen ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848629/

相关文章:

linux - 如何创建将备份当前目录并将存档发送到 FTP 服务器的 cronjob?

linux - 每 2 天安排一次 cron 作业

python - 一种将 "pipe"gnu screen 输出到正在运行的 python 进程的方法?

python - 在 linux "screen"中运行 Python 脚本会产生 "Cannot assign requested address"

linux - 实时系统中高效的内存调度算法

python 2.7 mktime 给出相同输入的不同值

node.js - Hubot CronJob函数

linux - 使用 exit 0 退出 Perl 程序后无法找到命令提示符,直到我按 ENTER

linux - 如何删除特定字符串之前的所有内容

gnu-screen - 从 .screenrc 在 GNU Screen 窗口中运行命令