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的锁文件并运行作业。完成后,将删除锁定文件。您应该查看shelltrap
命令,并确保如果shell脚本由于可捕获信号(您不能捕获KILL和某些进程控制信号)而退出,则会删除锁文件
从另一个答案来看,屏幕
程序已经创建了锁文件;您可能不需要做任何特殊的事情来创建它们,但需要检测它们是否存在。另外,请查看GNU手册以了解更多信息
这将检查当前用户是否存在任何名为mapper的屏幕会话,只有在没有的情况下,才会启动新的会话。这是一个关于如何编写与cron一起使用的shell脚本的直截了当的问题。乔纳森:我同意,我不明白投票结果如何。实际上有几个原因。一种是,您希望能够稍后来查看作业进展情况,并手动干预自动启动的作业。另一种情况是,如果您希望cron添加或修改屏幕上已经运行的内容。例如,出于上述原因,正在运行游戏服务器。@Caleb:如果您希望通过文本输出检查作业的进度,更典型的做法可能是将cronjob的输出重定向到一个文件,并在需要时读取它。完美的答案,非常聪明的解决方案!我已将此书签,以备将来使用!
ls /var/run/screen/S-"$USER"/*.mapper >/dev/null 2>&1 || screen -S mapper ...