Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cronjob的Screen Bash脚本_Bash_Gnu Screen - Fatal编程技术网

Cronjob的Screen Bash脚本

Cronjob的Screen Bash脚本,bash,gnu-screen,Bash,Gnu Screen,嗨,我正在尝试使用屏幕作为工作的一部分 目前我有以下命令: screen -fa -d -m -S mapper /home/user/cron 如果屏幕映射器已经存在,我是否可以使此命令不执行任何操作?映射器设置为半小时的cronjob,但有时映射需要半个多小时才能完成,因此它们相互重叠,相互减慢,有时甚至导致下一个速度变慢,因此我最终运行了许多映射器屏幕 感谢您的时间,您为什么希望由cron运行的作业(根据定义)没有连接终端,可以对屏幕执行任何操作?根据“GNU屏幕是一种软件应用程序,可用

嗨,我正在尝试使用屏幕作为工作的一部分

目前我有以下命令:

screen -fa -d -m -S mapper /home/user/cron
如果屏幕映射器已经存在,我是否可以使此命令不执行任何操作?映射器设置为半小时的cronjob,但有时映射需要半个多小时才能完成,因此它们相互重叠,相互减慢,有时甚至导致下一个速度变慢,因此我最终运行了许多映射器屏幕


感谢您的时间,

您为什么希望由
cron
运行的作业(根据定义)没有连接终端,可以对屏幕执行任何操作?根据“GNU屏幕是一种软件应用程序,可用于多路复用多个虚拟控制台,允许用户访问多个单独的终端会话”

但是,假设这样做是有原因的,那么您可能需要创建一个锁文件,该进程在继续之前检查该文件。此时,您需要从
cron
条目运行一个shell脚本(这通常是一种很好的技术),shell脚本可以检查任务的上一次运行是否已完成,如果没有,则退出。如果前一个版本完成,那么当前版本将创建一个包含其PID的锁文件并运行作业。完成后,将删除锁定文件。您应该查看shell
trap
命令,并确保如果shell脚本由于可捕获信号(您不能捕获KILL和某些进程控制信号)而退出,则会删除锁文件

从另一个答案来看,
屏幕
程序已经创建了锁文件;您可能不需要做任何特殊的事情来创建它们,但需要检测它们是否存在。另外,请查看GNU手册以了解更多信息


这将检查当前用户是否存在任何名为mapper的屏幕会话,只有在没有的情况下,才会启动新的会话。

这是一个关于如何编写与cron一起使用的shell脚本的直截了当的问题。乔纳森:我同意,我不明白投票结果如何。实际上有几个原因。一种是,您希望能够稍后来查看作业进展情况,并手动干预自动启动的作业。另一种情况是,如果您希望cron添加或修改屏幕上已经运行的内容。例如,出于上述原因,正在运行游戏服务器。@Caleb:如果您希望通过文本输出检查作业的进度,更典型的做法可能是将cronjob的输出重定向到一个文件,并在需要时读取它。完美的答案,非常聪明的解决方案!我已将此书签,以备将来使用!
ls /var/run/screen/S-"$USER"/*.mapper >/dev/null 2>&1 || screen -S mapper ...