如何创建一个 cron 命令来执行分离屏幕内的命令?

如何创建一个 cron 命令来执行分离屏幕内的命令?

我已经创建了一个屏幕,但是我现在可以以某种方式执行在分离的屏幕中运行命令的命令吗?

我甚至不知道这是否可能,但如果可能的话,这对你来说可能是一件简单而容易的事情。

感谢你的付出。

答案1

注意:原始发帖人询问“如何在 cron 中执行此操作”。我已更新回复以解决该问题。

  • 获取‘屏幕内’脚本并将其放入~/bin/

    # 从 https://gist.github.com/1019125 下载“inscreen”脚本
    wget -O ~/bin/inscreen https://gist.github.com/gists/1019125/download
    chmod 755 ~/bin/inscreen
    
  • 创建一个名为“cronjobs”的屏幕会话:

    screen -d -m -S cronjobs

    您必须安排在每次启动时执行此操作,或者在下面的每个 crontab 条目中添加“--new-if-needed”。

  • 使用 在 cron 中添加条目inscreen,crontab 如下所示:

    PATH = /home/你的名称/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    * * * * * 屏幕内 cronjobs -- sh -c 'echo $(date): start; sleep 30; echo $(date): end; sleep 4'
    0 0 * * 0 inscreen cronjobs --keep-open --title reminder echo ==== 给你妈妈打电话 ====
    0 0 * * 1 屏幕 cronjobs --window 0 ls /tmp
    

以上内容将:

  • 每分钟在“cronjobs”屏幕会话中打开一个新窗口,写入日期,休眠 30 秒,然后退出。退出时窗口将关闭。
  • 每个星期日午夜打开一个新窗口,标题为“提醒”,上面写着“====给你妈妈打电话=====”并要求您按回车键关闭窗口。
  • 每周一午夜在“cronjobs”会话的第一个窗口中运行“ls /tmp”。但请注意,不能同时运行其他“--window 0”作业。

答案2

smoser 的回答虽然有点复杂,但还是不错。你也可以将其简化为

screen -d -m -S mysession -t label sleep 1m

但需要注意的是,当进程退出时,屏幕将消失,您将无法看到它在屏幕上写入的内容。这可能适合您的情况,也可能不适合。您可以通过在.screenrc

defzombie ZZ 

这意味着屏幕在其进程退出后会一直停留直到您按下 Z 键。

相关内容