我已经浏览了许多关于如何通过终端通过一个衬垫添加 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
)