Overview
The script below will create a LaunchDaemon and Bash script to run Recon at the next reboot.
We’ve found this helpful with OS upgrade policies which tend to ignore (or fail) when “Maintenance > Update Inventory” is included.
Background
We use Deploying an OS X Upgrade as a guide for our users to upgrade their operating system via Self Service.
After the installer is cached, in a separate policy, we prompt users to visit Self Service and actually run the OS upgrade. The policy then updates inventory.
Including “Maintenance > Update Inventory” in the OS installation policy proved problematic and after a sucessful OS upgrade via Self Service, the JSS would have stale inventory data and end-users would be again prompted to install the OS upgrade they ran the day before.
Script
#!/bin/bash #################################################################################################### # # ABOUT # # Creates a Launch Daemon to run a Recon at next Reboot # #################################################################################################### # # HISTORY # # Version 1.0, 10-Nov-2016, Dan K. Snelson # #################################################################################################### # Import client-side functions # See: https://github.com/dan-snelson/Jamf-Pro-Scripts/tree/master/Client-side%20Functions source /path/to/client-side/functions.sh #################################################################################################### # Variables plistDomain="com.company.division" # Hard-coded domain name (i.e., "com.company.division") plistLabel="reconAtReboot" # Unique label for this plist (i.e., "reconAtReboot") plistLabel="$plistDomain.$plistLabel" # Prepend domain to label scriptPath="/usr/local/companyname/reconAtReboot.sh" ScriptLog "##############################" ScriptLog "### Recon at Reboot Create ###" ScriptLog "##############################" # Create launchd plist to call a shell script ScriptLog "* Create the LaunchDaemon ..." /bin/echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> <plist version=\"1.0\"> <dict> <key>Label</key> <string>${plistLabel}</string> <key>ProgramArguments</key> <array> <string>sh</string> <string>${scriptPath}</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>" > /Library/LaunchDaemons/${plistLabel}.plist # Set the permission on the file ScriptLog "* Set LaunchDaemon file permissions ..." /usr/sbin/chown root:wheel /Library/LaunchDaemons/${plistLabel}.plist /bin/chmod 644 /Library/LaunchDaemons/${plistLabel}.plist /bin/chmod +x /Library/LaunchDaemons/${plistLabel}.plist # Create reboot script ScriptLog "* Create the script ..." /bin/echo "#!/bin/sh #################################################################################################### # # ABOUT # # Recon at Reboot # #################################################################################################### # # HISTORY # # Version 1.0, 10-Nov-2016, Dan K. Snelson # Version 1.1, 08-Nov-2017, Dan K. Snelson # Quit Self Service # #################################################################################################### # Import client-side functions # See: https://github.com/dan-snelson/Jamf-Pro-Scripts/tree/master/Client-side%20Functions source /path/to/client-side/functions.sh #################################################################################################### ScriptLog \"### Recon at Reboot ###\" ScriptLog \" \" # Blank line for readability # Sleeping for 25 seconds for auto-launched applications to start ScriptLog \"* Pausing Recon at Reboot for 25 seconds for auto-launched applications to start ...\" /bin/sleep 25 # Quit Self Service ScriptLog \"Quit Self Service\" # Self Service may have been running when the computer was restarted /usr/bin/pkill -l -U \"`/usr/bin/stat -f%Su /dev/console`\" \"Self Service\" # Sleeping for 10 minutes (600 seconds) to give Wi-Fi time to come online. ScriptLog \"* Pausing Recon at Reboot for 10 minutes to allow Wi-Fi and DNS to come online ...\" /bin/sleep 600 ScriptLog \"* Resuming Recon at Reboot ...\" ScriptLog \"* Updating inventory ...\" /usr/local/bin/jamf recon # Delete launchd plist ScriptLog \"* Delete $plistLabel.plist ...\" /bin/rm -fv /Library/LaunchDaemons/$plistLabel.plist # Delete script ScriptLog \"* Delete script ...\" /bin/rm -fv ${scriptPath} exit 0" > ${scriptPath} # Set the permission on the file ScriptLog "* Set script file permissions ..." /usr/sbin/chown root:wheel ${scriptPath} /bin/chmod 644 ${scriptPath} /bin/chmod +x ${scriptPath} jssLog "* LaunchDaemon and Script created." exit 0