crontab 添加不起作用

crontab 添加不起作用

我已经浏览了许多关于如何通过终端通过一个衬垫添加 crontab 的答案,并且到处只遇到一个选项,即

{crontab -l; echo "1 * * * * /usr/bin/firefox" } | crontab -

正在运行,我收到的只是

>

就是这样。提示我输入一些内容。

第二个选项是

(crontab -l; echo "1 * * * * /usr/bin/firefox" ) | crontab -

这似乎添加了 cron,/var/spool/cron/crontabs/root但并不是firefox每分钟都打开,事实上它根本没有打开。

我在大多数答案中读到最多的是您不应直接编辑/var/spool/cron/crontabs/root/etc/crontab文件。

这是我的系统不支持还是什么?

的输出uname -a给出了我的系统的以下描述

Linux earth 4.9.0-kali4-amd64 #1 SMP Debian 4.9.30-2kali1 (2017-06-22) x86_64 GNU/Linux

/var/spool/mail/mail编辑:以下消息日志在我的日志中经常重复

From [email protected] Sun Jul 09 16:01:12 2017 
Return-path: < [email protected] > 
Envelope-to: [email protected] 
Delivery-date: Sun, 09 Jul 2017 16:01:12 +0530 
Received: from root by earth with local (Exim 4.89)   
    (envelope-from <[email protected]>)  
    id 1dU9UY-0001Ry-3A   
    for [email protected]; Sun, 09 Jul 2017 16:01:06 +0530 
From: [email protected] (Cron Daemon) 
To: [email protected] 
Subject: Cron <root@earth> /usr/bin/firefox 
MIME-Version: 1.0 
Content-Type: text/plain; charset=UTF-8 
Content-Transfer-Encoding: 8bit X-Cron-Env: < SHELL=/bin/sh > 
X-Cron-Env: < HOME=/root > 
X-Cron-Env: < PATH=/usr/bin:/bin > 
X-Cron-Env: < LOGNAME=root > Message-Id: < E1dU9UY-0001Ry-3A@earth > 
Date: Sun, 09 Jul 2017 16:01:06 +0530

Error: GDK_BACKEND does not match available displays

答案1

您的第二次尝试很可能是正确的,但您的期望是错误的。

让我们分部分来看:

crontab -l

列出当前用户的 crontab 的所有现有条目。这

echo "1 * * * * /usr/bin/firefox"

只是再次打印该行。然后,这两个命令将组合在一个子 shell 中,并将公共输出通过管道传输到

crontab -

因此,crontab 被通过标准输入传入的内容覆盖,在本例中是旧 crontab 加上新条目。

正如你所说,它被添加到 crontab 文件中。并且,假设 cron 守护进程正在运行,该命令将每分钟执行一次。

那么为什么你没有每分钟看到一个 Firefox 窗口呢? - 因为 conrjob 在 cron 守护进程下面的不同 shell 中运行,它无法访问您的 X 会话,因此 Firefox 将失败并报告类似的内容

(firefox:22376): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.
Error: GDK_BACKEND does not match available displays

并终止。如何看到该错误?通常 cron 守护进程会尝试向您发送一封邮件,/var/spool/mail最终见。


关于两种形式:

{ crontab -l; echo "1 * * * * /usr/bin/firefox" } | crontab -

必须写成

{ crontab -l; echo "1 * * * * /usr/bin/firefox"; } | crontab -

(注意多余的分号)

()和之间的区别{}在于,前者创建一个子 shell,而后者在同一 shell 上下文中执行命令。因此,变量赋值以一种形式存在,而不是以另一种形式存在。

答案2

当我尝试firefox-esr从 cron 作业启动时,我遇到了同样的错误。

DISPLAY不过,在 cron 文件中进行正确设置会有所帮助

* * * * * pi export DISPLAY=:0 && /usr/bin/firefox-esr &

(确保DISPLAY通过执行计算出您的实际数字echo $DISPLAY

相关内容