3

I purchased an external hard drive for scheduled backups of my macbook pro, presumably under cron. My rsync commands work fine when I invoke on the bash (interactive) command line. But as soon as I try to do them under cron, they fail. In fact, cron cannot find files on the external hard drive. The code below demonstrates this.

#!/bin/bash
echo ========================================== 
date '+%Y-%m-%d %a %H:%M:%S'
whoami 
printenv
find -s /Users/kpr/nDoNotBackup/Dustin /Volumes/oom/tmp -type f  -newermt '2021-12-30'

The script is called zee. To put both the interactive command and the cron command into identical shells, I used env -i /bin/bash -login -c. For this, I followed https://stackoverflow.com/questions/9671027/sanitize-environment-with-command-or-bash-script.

First interactive:

~/tmplocal/DUMS/zee> env -i /bin/bash -login -c '/Users/kpr/u/kh/bin/zee >> /Users/kpr/tmplocal/DUMS/zee/out.txt 2>&1'

and then

~> crontab -l
00 16  *  *  *  $HOME/u/kh/bin/jaw20200410cronmakeccalfile.sh
05 22  *  *  *  env -i /bin/bash -login -c '/Users/kpr/u/kh/bin/zee >> /Users/kpr/tmplocal/DUMS/zee/out.txt 2>&1'
~> 

In out.txt, the invocations are distinguishable by their values of PWD.

==========================================
2021-12-30 Thu 22:03:43
kpr
PATH=/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/Library/Apple/usr/bin
PWD=/Users/kpr/tmplocal/DUMS/zee
SHLVL=2
_=/usr/bin/printenv
/Users/kpr/nDoNotBackup/Dustin/srczee/Hey
/Volumes/oom/tmp/srczee/Hey
==========================================
2021-12-30 Thu 22:05:00
kpr
PATH=/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/Library/Apple/usr/bin
PWD=/Users/kpr
SHLVL=2
_=/usr/bin/printenv
/Users/kpr/nDoNotBackup/Dustin/srczee/Hey
find: /Volumes/oom/tmp: Operation not permitted

Why would cron cause this problem? How can I run a command as simple as find, under cron, so that it will work as well as in the interactive shell?

Below is some information on the external HD and on my macbook's HD. Do I need to format the external HD differently? But then why is it accessible from the command line?

~/u/kh/bin> diskutil info /Volumes/oom
   Device Identifier:         disk4
   Device Node:               /dev/disk4
   Whole:                     Yes
   Part of Whole:             disk4
   Device / Media Name:       My Passport 260D

   Volume Name:               oom
   Mounted:                   Yes
   Mount Point:               /Volumes/oom

   Content (IOContent):       Apple_HFSX
   File System Personality:   Case-sensitive Journaled HFS+
   Type (Bundle):             hfs
   Name (User Visible):       Mac OS Extended (Case-sensitive, Journaled)
   Journal:                   Journal size 385024 KB at offset 0x48c8000
   Owners:                    Disabled

   OS Can Be Installed:       Yes
   Booter Disk:               disk3s3
   Media Type:                Generic
   Protocol:                  USB
   SMART Status:              Not Supported
   Volume UUID:               3FE9A430-BADA-39B9-8B8A-BBD9F734633D
   Disk / Partition UUID:     D1537CEC-27E9-43EF-86ED-E7A2A7A16C11

   Disk Size:                 5.0 TB (5000247902208 Bytes) (exactly 9766109184 512-Byte-Units)
   Device Block Size:         512 Bytes

   Volume Total Space:        5.0 TB (5000247902208 Bytes) (exactly 9766109184 512-Byte-Units)
   Volume Used Space:         2.8 TB (2773301460992 Bytes) (exactly 5416604416 512-Byte-Units) (55.5%)
   Volume Free Space:         2.2 TB (2226946441216 Bytes) (exactly 4349504768 512-Byte-Units) (44.5%)
   Allocation Block Size:     8192 Bytes

   Read-Only Media:           No
   Read-Only Volume:          No

   Device Location:           External
   Removable Media:           Fixed

   Solid State:               Info not available
   Virtual:                   Yes

   This disk is a Core Storage Logical Volume (LV).  Core Storage Information:
   LV UUID:                   D1537CEC-27E9-43EF-86ED-E7A2A7A16C11
   LVF UUID:                  6C06FD6C-D00A-4953-AFC3-5D5908487D26
   LVG UUID:                  E80D582C-0EDA-49E0-ADD6-A718B36AAF6A
   PV UUID (disk):            70BC9B73-B6CC-4D90-9DC0-22EC0E5490D3 (disk3s2)
   Fusion Drive:              No
   Encrypted:                 Yes

~/u/kh/bin> diskutil info /
   Device Identifier:         disk1s1
   Device Node:               /dev/disk1s1
   Whole:                     No
   Part of Whole:             disk1

   Volume Name:               Macintosh HD
   Mounted:                   Yes
   Mount Point:               /

   Partition Type:            41504653-0000-11AA-AA11-00306543ECAC
   File System Personality:   APFS
   Type (Bundle):             apfs
   Name (User Visible):       APFS
   Owners:                    Enabled

   OS Can Be Installed:       No
   Booter Disk:               disk1s3
   Recovery Disk:             disk1s4
   Media Type:                Generic
   Protocol:                  PCI-Express
   SMART Status:              Verified
   Volume UUID:               36033C28-202B-4932-B271-C8BD841FBAAF
   Disk / Partition UUID:     36033C28-202B-4932-B271-C8BD841FBAAF

   Disk Size:                 2.0 TB (2000796545024 Bytes) (exactly 3907805752 512-Byte-Units)
   Device Block Size:         4096 Bytes

   Container Total Space:     2.0 TB (2000796545024 Bytes) (exactly 3907805752 512-Byte-Units)
   Container Free Space:      1.2 TB (1209274347520 Bytes) (exactly 2361863960 512-Byte-Units)
   Allocation Block Size:     4096 Bytes

   Read-Only Media:           No
   Read-Only Volume:          Yes

   Device Location:           Internal
   Removable Media:           Fixed

   Solid State:               Yes
   Hardware AES Support:      Yes

   This disk is an APFS Volume.  APFS Information:
   APFS Container:            disk1
   APFS Physical Store:       disk0s2
   Fusion Drive:              No
   APFS Volume Group:         8D013C64-D366-4902-B782-502203E919F2
   FileVault:                 Yes
   Locked:                    No

~/u/kh/bin> 
2

1 Answer 1

2

The answer is laid out explicitly in https://www.getdroidtips.com/cron-permission-issues-macos/. This is risky and "do not try this at home!" Anybody doing this must assume the full risk.

Quote:

If the latest versions of Mac OS faces cron permissions issues, then you should have to grant full disk access. Let’s go by the following steps to allow the full disk access to cron.

  1. Go to System Preferences in Apple Menu and select the “Security & Privacy” option.

  2. In the “Privacy” tab, select the “Full Disk Access” option from the side menu option.

  3. Click on the lock icon in the corner and authenticate with the system password to modify full disk access settings in your Mac.

  4. Now pull down the “Go” menu from the Finder in Mac OS and choose “Go to Folder.”

  5. Now enter the path: /usr/sbin/cron and select Go.

  6. Now you have to drag and drop the “cron” in the list of apps and processes with full disk access permission. Cron should now appear in the list.

  7. Get out of system preferences window and open Finder sbin window once you finished.

There are security measures introduced with the release of new Mac OS, and causes issues like operation not permitted.

Not the answer you're looking for? Browse other questions tagged .