Default cron PATH does not include /snap/bin

Bug #1779767 reported by Mike Pontillo
26
This bug affects 5 people
Affects Status Importance Assigned to Milestone
anacron (Ubuntu)
Fix Released
Undecided
Unassigned
Bionic
Won't Fix
Undecided
Unassigned
Focal
Won't Fix
Undecided
Unassigned
Groovy
Won't Fix
Undecided
Unassigned
Hirsute
Fix Released
Undecided
Unassigned
cron (Ubuntu)
Fix Released
Medium
Unassigned
Bionic
Won't Fix
Undecided
Unassigned
Focal
Won't Fix
Undecided
Unassigned
Groovy
Won't Fix
Undecided
Unassigned
Hirsute
Fix Released
Medium
Unassigned

Bug Description

I recently changed from a .deb install of LXD to a snap, and was surprised that one of my crontab scripts stopped working.

I see that $PATH in a cron script only contains "/usr/bin:/bin", whereas my default shell also includes "/snap/bin".

It seems to me that for the best user experience with snaps, "/snap/bin" should be part of the default $PATH in cron.

ProblemType: Bug
DistroRelease: Ubuntu 18.04
Package: cron 3.0pl1-128.1ubuntu1
ProcVersionSignature: Ubuntu 4.15.0-20.21-generic 4.15.17
Uname: Linux 4.15.0-20-generic x86_64
NonfreeKernelModules: kpatch_livepatch_Ubuntu_4_15_0_20_21_generic_40 kpatch_livepatch_Ubuntu_4_15_0_20_21_generic_39 livepatch_livepatch_Ubuntu_4_15_0_20_21_generic_ zfs zunicode zavl icp zcommon znvpair
ApportVersion: 2.20.9-0ubuntu7.2
Architecture: amd64
CurrentDesktop: ubuntu:GNOME
Date: Mon Jul 2 14:30:06 2018
InstallationDate: Installed on 2017-12-20 (194 days ago)
InstallationMedia: Ubuntu 18.04 LTS "Bionic Beaver" - Alpha amd64 (20171219)
ProcEnviron:
 TERM=xterm-256color
 PATH=(custom, no user)
 XDG_RUNTIME_DIR=<set>
 LANG=en_US.UTF-8
 SHELL=/bin/bash
SourcePackage: cron
UpgradeStatus: No upgrade log present (probably fresh install)

Related branches

Revision history for this message
Mike Pontillo (mpontillo) wrote :
description: updated
Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in cron (Ubuntu):
status: New → Confirmed
tags: added: canonical-bootstack
tags: added: rls-ee-incoming
Revision history for this message
Dimitri John Ledkov (xnox) wrote :

I believe this will be fixed in v2.41 snapd.

Changed in cron (Ubuntu):
importance: Undecided → Medium
Changed in cron (Ubuntu):
assignee: nobody → Dimitri John Ledkov (xnox)
Revision history for this message
Iain Lane (laney) wrote :

This bug is old but I'm going to un-duplicate it. I don't believe it is fixed.

I've got a cron script on focal (cron 3.0pl1-136ubuntu1) which is indirectly running `lxc` from a snap (/snap/bin/lxc).

I found the following in mail though:

/home/ubuntu/autopkgtest/tools/autopkgtest-build-lxd: 139: lxc: not found
/home/ubuntu/autopkgtest/tools/autopkgtest-build-lxd: 1: lxc: not found

crontab(5) mentions the default as being "/usr/bin:/bin", and how it does NOT come from /etc/environment. What you have to do is set "PATH=/snap/bin:/usr/bin:/bin" at the top of the crontab file if you want to be able to use snaps. (You can't do "PATH=/snap/bin:$PATH"...)

pathnames.h has a #define for _PATH_DEFPATH where AFAICS this comes from. Maybe it's that which we would want to modify to fix this for cron in Ubuntu.

Changed in cron (Ubuntu):
assignee: Dimitri John Ledkov (xnox) → nobody
tags: added: rls-ff-incoming rls-hh-incoming
removed: rls-ee-incoming
Revision history for this message
Dimitri John Ledkov (xnox) wrote :

@laney i would agree to patch cron with our default path, with snap/bin included.

tags: added: fr-1092
tags: removed: rls-ff-incoming rls-hh-incoming
Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in anacron (Ubuntu Bionic):
status: New → Confirmed
Changed in anacron (Ubuntu Focal):
status: New → Confirmed
Changed in anacron (Ubuntu Groovy):
status: New → Confirmed
Changed in anacron (Ubuntu):
status: New → Confirmed
Changed in cron (Ubuntu Bionic):
status: New → Confirmed
Changed in cron (Ubuntu Focal):
status: New → Confirmed
Changed in cron (Ubuntu Groovy):
status: New → Confirmed
Changed in cron (Ubuntu Hirsute):
status: Confirmed → Fix Committed
Changed in anacron (Ubuntu Hirsute):
status: Confirmed → Fix Committed
Revision history for this message
Iain Lane (laney) wrote :

Julian, thanks for the fix. In crontab(5) in cron 3.0pl1-136ubuntu2 the manpage
is now wrong. It says:

> Several environment variables are set up automatically by the cron(8) daemon.
> […] PATH is set to "/usr/bin:/bin". HOME, SHELL, and PATH may be overridden
> by settings in the crontab […]

and also

> On the Debian GNU/Linux system, cron supports the pam_env module, and loads
> the environment specified by /etc/environment and /etc/security/pam_env.conf.
> It also reads locale information from /etc/default/locale. However, the PAM
> settings do NOT override the settings described above nor any settings in the
> crontab file itself. Note in particular that if you want a PATH other than
> "/usr/bin:/bin", you will need to set it in the crontab file.

These should be fixed I think. There might be other spots that I didn't notice
yet too.

Secondly, as there are now tasks for stable releases, I think the SRU team
needs to be made aware of the implications of SRUing this change. It means that
the default PATH (if not overridden) will be different after applying the
update. There's a chance that users will then have different copies of
programs found resulting in their cron scripts potentially experiencing
behaviour changes. The benefits of consistency may outweigh the
risks/drawbacks of this behaviour change, but I think it should be considered
carefully when SRUing.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package anacron - 2.3-30ubuntu2

---------------
anacron (2.3-30ubuntu2) hirsute; urgency=medium

  * Do not override PATH in anacrontab and cron.d anymore (LP: #1779767).
    - The latter change is needed because anacron when invoked by cron should
      inherit cron's PATH and not it's cron.d snippet.
    - This does not work on sysvinit, where it will now produce the wrong
      result because it inherits the init script's PATH variable, so it's
      not possible to forward to Debian

 -- Julian Andres Klode <email address hidden> Mon, 15 Mar 2021 16:58:18 +0100

Changed in anacron (Ubuntu Hirsute):
status: Fix Committed → Fix Released
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package cron - 3.0pl1-136ubuntu2

---------------
cron (3.0pl1-136ubuntu2) hirsute; urgency=medium

  * d/p/f/inherit-path.patch: Add -P option to inherit PATH from environment,
    thanks to Tom Jones for the patch (Closes: #688716)
  * Inherit PATH by default (LP: #1779767):
    - debian/crontab.main: Stop setting PATH
    - debian/cron.service, debian/cron.init: Pass -P to cron

 -- Julian Andres Klode <email address hidden> Mon, 15 Mar 2021 15:10:36 +0100

Changed in cron (Ubuntu Hirsute):
status: Fix Committed → Fix Released
Changed in cron (Ubuntu Groovy):
status: Confirmed → Won't Fix
Changed in anacron (Ubuntu Groovy):
status: Confirmed → Won't Fix
Graham Inggs (ginggs)
Changed in anacron (Ubuntu Bionic):
status: Confirmed → Won't Fix
Changed in anacron (Ubuntu Focal):
status: Confirmed → Won't Fix
Changed in cron (Ubuntu Bionic):
status: Confirmed → Won't Fix
Changed in cron (Ubuntu Focal):
status: Confirmed → Won't Fix
Revision history for this message
Graham Inggs (ginggs) wrote :

crontab(5) manpage being updated in LP: #1938924

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.