您好我正在尝试将屏幕用作cronjob的一部分。
目前我有以下命令:
screen -fa -d -m -S mapper /home/user/cron
无论如何,如果屏幕映射器已经存在,我可以使此命令不执行任何操作吗?映射器设置在半小时的cronjob上,但有时映射需要半个多小时才能完成,因此它们重叠,相互减慢,有时甚至导致下一个慢,所以我最终得到很多映射器屏幕正在运行。
感谢您的时间,
答案 0 :(得分:6)
ls /var/run/screen/S-"$USER"/*.mapper >/dev/null 2>&1 || screen -S mapper ...
这将检查当前用户是否存在任何名为mapper的屏幕会话,并且只有在没有任何屏幕会话时才会启动新会话。
答案 1 :(得分:2)
为什么您希望cron
运行的作业(根据定义)没有附加终端,可以对屏幕执行任何操作?根据{{3}},'GNU Screen是一个软件应用程序,可用于复用多个虚拟控制台,允许用户访问多个单独的终端会话。
但是,假设有一些理由这样做,那么您可能需要创建一个锁定文件,进程在继续之前检查该文件。此时,您需要从cron
条目运行shell脚本(这通常是一种很好的技术),shell脚本可以检查上一次任务是否已完成,如果没有则退出。如果先前的化身已完成,则当前的化身会创建一个包含其PID的锁定文件并运行该作业。完成后,它会删除锁定文件。您应该查看shell trap
命令,并确保如果shell脚本由于可捕获信号而退出(您无法捕获KILL和某些过程控制信号),则会删除锁定文件。
从另一个答案来看,screen
程序已经创建了锁文件;您可能不需要做任何特殊的事情来创建它们 - 但需要检测它们是否存在。另请查看Wikipedia的GNU手册。