【问题标题】:Cron Task which displays something (task launched but nothing happens) [duplicate]显示某些内容的 Cron 任务(任务已启动但没有任何反应)[重复]
【发布时间】:2022-02-08 06:41:59
【问题描述】:

我很好地使用了命令“crontab -e”并添加了这个任务:

* * * * * * bash /home/user1/launcher.sh

launcher.sh 的内容是:

#!/bin/bash

PATH=/home/user1/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

/usr/bin/gedit

launcher.sh 的权限为 777。

我期待看到 gedit 每分钟都启动....但什么也没发生。为什么?

我认为 crontab 可以很好地启动“launcher.sh”,正如我在 syslog 中看到的那样:

Feb  7 22:58:01 librempc CRON[5922]: (user1) CMD (bash /home/user1/launcher.sh)
Feb  7 22:58:01 librempc CRON[5921]: (CRON) info (No MTA installed, discarding output)

【问题讨论】:

  • DISPLAY 环境变量未在cron 环境中设置,因此它无权访问 X 服务器。
  • 正如@Barmar 提到的,您可以将“DISPLAY=:0”添加到您的 crontab 记录中,例如 * * * * * env DISPLAY=:0 /path/to/script ,也可以尝试将其作为您的作为 x-server 权限的用户不是 root 可能有其他意见
  • 如果您尝试使用 cron,那么非交互式命令将是更适合的目标。例如,date > /tmp/cron.timestamp

标签: linux bash cron xserver


【解决方案1】:

默认情况下,Cron 使用很少的环境变量执行任务。

那里解释得很好: cron & the environment variables

对于环境变量“PATH”,可以在任务本身的 bash 脚本中定义:

PATH=/home/user1/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

但是对于环境变量“DISPLAY”(如果您启动的任务显示某些内容,这是强制性的),必须直接在cron文件中精确。

* * * * * * DISPLAY=:0 bash /home/user1/launcher.sh

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多