AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1454389
Accepted
Flimm
Flimm
Asked: 2023-02-11 08:32:47 +0800 CST2023-02-11 08:32:47 +0800 CST 2023-02-11 08:32:47 +0800 CST

在 Ubuntu 上,用户的 cron 输出默认转到哪里?

  • 772

如果我运行crontab -e,Ubuntu 会显示当前用户的默认 cron 作业:

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

请注意这样说的部分:

crontab 作业的输出(包括错误)通过电子邮件发送给 crontab 文件所属的用户(除非重定向)。

如何查看此输出?什么电子邮件与我的 Linux 用户相关联?

如果我查看grep CRON /var/log/syslog,我会看到这样的行:

Feb 10 17:27:01 desktop-ubuntu CRON[36079]: (CRON) info (No MTA installed, discarding output)

我假设 MTA 是指邮件传输代理。输出似乎被丢弃了。

就个人而言,我希望将输出保存在某个地方,而无需转到 Internet 上的真实电子邮件地址。但我的问题更多是关于理解默认行为。

cron
  • 2 2 个回答
  • 56 Views

2 个回答

  • Voted
  1. Artur Meinild
    2023-02-11T10:17:30+08:002023-02-11T10:17:30+08:00

    为了让 cron 发送电子邮件,您需要安装 postfix 或其他 MTA(邮件传输代理)。

    如果没有设置特定的电子邮件地址,邮件将被发送到位于 的内部用户电子邮件地址/var/mail/<username>。

    您还可以指定 cron 将变量发送到的外部电子邮件地址MAILTO。所以在你的 crontab 中,设置:

    [email protected]
    

    然后 cron 将向该地址发送电子邮件。

    如果您想禁用 cron 发送电子邮件,请在 crontab 中设置:

    MAILTO=""
    

    这将是您控制默认行为的方式。

    • 2
  2. Best Answer
    Flimm
    2023-02-15T00:09:23+08:002023-02-15T00:09:23+08:00

    我喜欢@Artur Meinild 的回答,我想更深入地挖掘一下,因为我真的很想了解它是如何工作的。通过启用源代码存储库并运行apt-get source cron. 这是我学到的:

    cron 只是使用命令sendmail

    要发送电子邮件,cron 只需运行命令sendmail,如下所示:

    /usr/sbin/sendmail -FCronDaemon -i -B8BITMIME -oem "$MAILTO"
    

    (确切的命令行参数可能有所不同,但这就是它的要点)

    MAILTO是可以在 crontab 中设置的环境变量。如果未设置,则LOGNAME使用环境变量代替。Cron 设置LOGNAME为 Linux 用户的用户名。来自man 5 crontab:

    cron(8) 守护进程自动设置了几个环境变量。 SHELL设置为/bin/sh, 和LOGNAME是HOME根据/etc/passwdcrontab 所有者的行设置的。 PATH是环境遗传的。 HOME, SHELL, 并且PATH可以被 crontab 中的设置覆盖;LOGNAME是运行作业的用户,不能更改。

    除了LOGNAME、HOME、 和 之外SHELL,cron(8) 还会查看MAILTO是否MAILFROM有任何理由作为此 crontab 中运行命令的结果发送邮件。

    如果 MAILTO 已定义(且非空),邮件将发送给如此命名的用户。 MAILTO也可用于通过用逗号分隔收件人用户将邮件定向到多个收件人。如果MAILTO已定义但为空 ( MAILTO=""),则不会发送任何邮件。否则邮件将发送给 crontab 的所有者。

    如果MAILFROM已定义,发件人电子邮件地址将设置为MAILFROM。否则邮件将作为“root (Cron Daemon)”发送。

    默认情况下,Ubuntu 不附带sendmail安装的命令。在这种情况下,您会在日志中注意到此错误:

    Feb 10 17:27:01 desktop-ubuntu CRON[36079]: (CRON) info (No MTA installed, discarding output)
    

    几个不同的软件包sendmail在 Ubuntu 上提供了一个命令。经常推荐的一种是后缀:

    $ sudo apt install postfix
    

    (在安装过程中出现提示时,我选择了“仅限本地”选项,因为我对通过 Internet 发送电子邮件不感兴趣。)

    Postfix 安装命令sendmail是为了与其他包(如 cron)兼容,这些包希望sendmail找到命令。还安装的其他软件包sendmail是:

    $ apt-file search -F /usr/sbin/sendmail
    courier-mta: /usr/sbin/sendmail           
    dma: /usr/sbin/sendmail
    esmtp-run: /usr/sbin/sendmail
    exim4-daemon-heavy: /usr/sbin/sendmail
    exim4-daemon-light: /usr/sbin/sendmail
    lsb-invalid-mta: /usr/sbin/sendmail
    masqmail: /usr/sbin/sendmail
    msmtp-mta: /usr/sbin/sendmail
    nullmailer: /usr/sbin/sendmail
    opensmtpd: /usr/sbin/sendmail
    postfix: /usr/sbin/sendmail
    ssmtp: /usr/sbin/sendmail
    

    似乎如果使用“仅限本地”配置安装 postfix,那么发送到 Linux 的邮件就会存储在这个位置/var/mail/<username>。以下是运行的 cron 作业运行后该文件的一些示例内容echo hi:

    $ less /var/mail/$USER
    From flimm@desktop-ubuntu  Tue Feb 14 08:54:01 2023
    Return-Path: <flimm@desktop-ubuntu>
    X-Original-To: flimm
    Delivered-To: flimm@desktop-ubuntu
    Received: by desktop-ubuntu (Postfix, from userid 1000)
            id 9C7137E12E4; Tue, 14 Feb 2023 08:54:01 +0100 (CET)
    From: root@desktop-ubuntu (Cron Daemon)
    To: flimm@desktop-ubuntu
    Subject: Cron <flimm@desktop-ubuntu> echo hi
    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=/home/flimm>
    X-Cron-Env: <LOGNAME=flimm>
    Message-Id: <20230214075401.9C7137E12E4@desktop-ubuntu>
    Date: Tue, 14 Feb 2023 08:54:01 +0100 (CET)
    
    hi
    
    

    如果您愿意,可以使用 mutt(在命令行上)或 Thunderbird(带有 GUI)之类的邮件客户端来查看存储在该位置的这些电子邮件。

    参考:

    • 邮件是从哪里来的?通过克里斯托夫·缪斯
    • crontab(5) 手册页(文件格式)
    • crontab(1) 手册页(用于命令)
    • 0

相关问题

  • Cron.hourly 不会运行

  • 网络启动时如何运行cron作业?

  • 如何设置 Cron 作业?

  • 如何每 5 秒运行一次脚本?

  • 如何使 cron 电子邮件成为我的 @gmail 帐户

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve