-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 01/02/2014 12:55 PM, Lars E. Pettersson wrote:
On 01/02/2014 08:45 PM, Chris Murphy wrote:
Is there something you expect to see that is missing from the journal?
Yes, the output of cron, that is not a part of the journal output.
Then cron is broken.
cron by default sends the output to root
$ head /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root
From 'man cron':
"When executing commands, any output is mailed to the owner of the
crontab (or to the user specified in the MAILTO environment variable in the crontab, if such exists)."
It also states:
"Any job output can also be sent to syslog by using the -s option."
The problem with that option is that the output from cron can
voluminous, and voluminous messages are better suited as mails.
Lars
I think there was some misunderstanding here. If you can't find your cronjob output in the journal, *your* cron is broken. Before I get too far in, in my opinion, mails are good for notification, voluminous content should be in the logs that the mail notifies about. The journal is good at logs.
$ su -c 'crontab -l' * * * * * echo "TEST TEST" $ crontab -l * * * * LARSHAPPY="no"; if [[ "$LARSHAPPY" == "no" ]]; then echo -e "This isn't the same.\nNew Things are Different.\nSome people like the old thing.";fi
$ journalctl SYSLOG_IDENTIFIER=CROND -f #filtered for convenience Jan 02 20:19:01 ruminant-randomuser-lan CROND[7923]: (pete) CMD (LARSHAPPY="no"; if [[ "$LARSHAPPY" == "no" ]]; then echo -e "This isn't the same.\nNew Things are Different.\nSome people like the old thing."; Jan 02 20:19:01 ruminant-randomuser-lan CROND[7922]: (root) CMD (echo "TEST TEST") Jan 02 20:19:01 ruminant-randomuser-lan CROND[7918]: (root) CMDOUT (TEST TEST) Jan 02 20:19:01 ruminant-randomuser-lan CROND[7919]: (pete) CMDOUT (This isn't the same.) Jan 02 20:19:01 ruminant-randomuser-lan CROND[7919]: (pete) CMDOUT (New Things are Different.) Jan 02 20:19:01 ruminant-randomuser-lan CROND[7919]: (pete) CMDOUT (Some people like the old thing.)
But wait! These things could get all mixed up on a busy machine, you say! Let's take a closer look at a message:
MESSAGE=(pete) CMDOUT (New Things are Different.) _AUDIT_SESSION=83 _SYSTEMD_CGROUP=/user.slice/user-1000.slice/session-83.scope _SYSTEMD_SESSION=83 _SYSTEMD_UNIT=session-83.scope SYSLOG_PID=8141 _PID=8141 _SOURCE_REALTIME_TIMESTAMP=1388719561402125 Thu 2014-01-02 20:26:01.402133 MST [s=04f24177eb10446c94ea389f0e5adb2f;i=49d85;b=0557929cbde247928f945d8b53a6e067;m=b529d73d;t=4ef0878266935;x=ade119e61f79d8c4] PRIORITY=6 _UID=0 _MACHINE_ID=0fb42f5d126e4f4e8b94045b4652c0f2 _HOSTNAME=ruminant-randomuser-lan _CAP_EFFECTIVE=1fffffffff _TRANSPORT=syslog SYSLOG_FACILITY=9 _COMM=crond _EXE=/usr/sbin/crond _SELINUX_CONTEXT=system_u:system_r:crond_t:s0-s0:c0.c1023 _GID=1000 _AUDIT_LOGINUID=1000 _SYSTEMD_OWNER_UID=1000 _SYSTEMD_SLICE=user-1000.slice SYSLOG_IDENTIFIER=CROND _CMDLINE=/usr/sbin/CROND -n _BOOT_ID=0557929cbde247928f945d8b53a6e067
All of that information is available to the user/admin, and to any applications reading the journal. Applications writing to the journal can even provide some extra metadata to aid in filtering - say, the name of a cronjob. Lots of ways to match this message. Let's try _AUDIT_SESSION, that sounds unique-ish:
$ journalctl SYSLOG_IDENTIFIER=CROND _AUDIT_SESSION=83 -b - -- Logs begin at Sun 2013-12-01 03:10:01 MST. -- Jan 02 20:26:01 ruminant-randomuser-lan CROND[8145]: (pete) CMD (LARSHAPPY="no"; if [[ "$LARSHAPPY" == "no" ]]; then echo -e "This isn't the same.\nNew Things are Different.\nSome people like ...d thing.";fi) Jan 02 20:26:01 ruminant-randomuser-lan CROND[8141]: (pete) CMDOUT (This isn't the same.) Jan 02 20:26:01 ruminant-randomuser-lan CROND[8141]: (pete) CMDOUT (New Things are Different.) Jan 02 20:26:01 ruminant-randomuser-lan CROND[8141]: (pete) CMDOUT (Some people like the old thing.)
Stop! I don't want all that extra information, you say! `journalctl` should KNOW I'm not interested in the timestamp, or the hostname, or the name and PID of the reporting binary - just give me the message!
journalctl SYSLOG_IDENTIFIER=CROND _AUDIT_SESSION=83 -o cat (pete) CMD (LARSHAPPY="no"; if [[ "$LARSHAPPY" == "no" ]]; then echo -e "<This isn't the same.\nNew Th (pete) CMDOUT (This isn't the same.) (pete) CMDOUT (New Things are Different.) (pete) CMDOUT (Some people like the old thing.)
I'll agree that this isn't as *simple* as banging out a four letter word and reading message, but the journal can provide context, too. If something catastrophic happens, the kind of thing that might lead you frantically searching through root's mail for answers, context can be important. We can grab the cursor from the query above, and broaden the filter to see what else was happening at the time. (timestamp could work to, with --since, I suppose, but it's not quite the same thing.)
$ journalctl SYSLOG_IDENTIFIER=CROND _AUDIT_SESSION=83 -b --show-cursor|tail -1 - -- cursor: s=04f24177eb10446c94ea389f0e5adb2f;i=49d85;b=0557929cbde247928f945d8b53a6e067;m=b529d73d;t=4ef0878266935;x=ade119e61f79d8c4
$ journalctl --cursor="s=04f24177eb10446c94ea389f0e5adb2f;i=49d85;b=0557929cbde247928f945d8b53a6e067;m=b529d73d;t=4ef0878266935;x=ade119e61f79d8c4" - -- Logs begin at Sun 2013-12-01 03:10:01 MST, end at Thu 2014-01-02 20:36:08 MST. -- Jan 02 20:26:01 ruminant-randomuser-lan CROND[8141]: (pete) CMDOUT (Some people like the old thing.) Jan 02 20:26:43 ruminant-randomuser-lan dhclient[1683]: DHCPREQUEST on em2 to 192.168.1.3 port 67 (xid=0 Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: DHCPREQUEST on em2 to 192.168.1.3 port 67 ( Jan 02 20:26:43 ruminant-randomuser-lan dhclient[1683]: DHCPACK from 192.168.1.3 (xid=0x5ec0b63f) Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: DHCPACK from 192.168.1.3 (xid=0x5ec0b63f) Jan 02 20:26:43 ruminant-randomuser-lan dhclient[1683]: bound to 192.168.1.167 -- renewal in 281 seconds Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: <info> (em2): DHCPv4 state changed renew -> Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: <info> address 192.168.1.167 Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: <info> plen 24 (255.255.255.0) Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: <info> gateway 192.168.1.1 Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: <info> lease time 600 Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: <info> nameserver '192.168.1.3' Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: <info> domain name 'randomuser.lan' Jan 02 20:26:43 ruminant-randomuser-lan NetworkManager[748]: bound to 192.168.1.167 -- renewal in 281 se
You're putting lots of effort into complaining about a hugely useful tool, and apparently little into learning about it. If the complaint is about cronjobs, start here:
http://0pointer.de/blog/projects/journal-submit.html https://git.fedorahosted.org/git/cronie.git
Of course, if you like the old way, you can just install and configure an MTA.
- -- - -- Pete Travis