如何创建将在分离的屏幕内执行命令的 cron 命令?

5 cron gnu-screen

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

我什至不知道这是否可行,但如果可行,对您来说可能会很简单。

感谢你的付出。

smo*_*ser 3

注意:原始发帖者询问“我如何在 cron 中执行此操作”。我已经更新了回复来解决这个问题。

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

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

    screen -d -m -S cronjobs

    您必须安排在每次启动时发生这种情况,或者将“--new-if-needed”添加到下面的每个 crontab 条目中。

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

    路径 = /home/你的名字/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    * * * * * 屏幕内的 cronjobs -- sh -c 'echo $(date): start; 睡30;回声 $(日期): 结束; 睡觉4'
    0 0 * * 0 屏幕内 cronjobs --keep-open --title 提醒 echo ==== 打电话给你的妈妈 ====
    0 0 * * 1 屏幕内 cronjobs --window 0 ls /tmp
    

上述内容将:

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


poo*_*lie 1

smoser 的答案很好,虽然有点复杂。您也可以将其简化为

screen -d -m -S mysession -t label sleep 1m
Run Code Online (Sandbox Code Playgroud)

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

defzombie ZZ 
Run Code Online (Sandbox Code Playgroud)

这意味着屏幕在进程退出后会一直挂起,直到您按 Z。