Files
Alte_Skripte/restart_mit_daemon.sh
2026-02-16 15:05:15 +01:00

263 lines
9.5 KiB
Bash

#!/bin/bash
#####################################################################################
# Shellscript : User kann entscheiden, wann das Gerät neugestartet wird.
# Quelle : https://
# Autor : Andreas Vogel, macenterprise gmbh, 17.12.2019
#####################################################################################
#################################### Remove und Delete old Daemon ####################################
launchctl remove de.ing.LastWarningDaemon.plist
/bin/rm -f /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
#################################### Jamf Helper ####################################
jamfHelper="/Library/Application Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper"
jamf="/usr/local/bin/jamf"
user=$(stat -f '%u %Su' /dev/console | cut -d ' ' -f 2)
INGIcon="/Users/$user/Library/Application Support/com.jamfsoftware.selfservice.mac/Documents/Images/brandingimage.png"
Message="
Auf diesem Gerät wurde ein Sicherheitsupdate installiert.
Dieses erfordert einen Neurtart des Gerätes. Bitte starte den Rechner jetzt neu oder wähle eine der Optionen aus um den Neustart zu verschieben.
A security update has been installed on this device.
This requires a reboot of the device. Please restart the computer now or select one of the options to reschedule the restart.
"
RestartOptions=$("$jamfHelper" -windowType utility -icon "$INGIcon" -title "Please restart" -description "$Message" -button2 "Restart in" -showDelayOptions "120, 300, 900, 1800, 14400, 21600" -button1 "Immediately" -cancelButton 1 -defaultButton 2 -timeout "300" -countdown -alignCountdown "right")
#################################### Variablen ####################################
# Variablen zur weiterverarbeitung
# Diese Variablen werden benötigt, damit ausgewertet werden kann, welche Taste gedrückt worden ist.
# Des Weiteren wird die gewählte Zeit ausgewertet und nach welche Zeit die letzte Warnung in Sekunden
# erfolgen wird.
buttonClicked="${RestartOptions:$i-1}"
result=$RestartOptions
delayint=$(echo "$result" | /usr/bin/sed 's/.$//')
warndelayint=$(expr $delayint - 60)
warndelayfivemin=$(expr $delayint - 300)
# Variablen delayRestart
# Diese Variablen werden für den delayRestart Daemon benutzt.
# Die Variablen sind entsprechen nicht den Variablen für die letzte Meldung.
defercal=$(($(/bin/date +%s) + delayint))
hour=$(/bin/date -j -f "%s" "$defercal" "+%H")
minute=$(/bin/date -j -f "%s" "$defercal" "+%M")
# Variablen für LastWarning Daemon
# Dieses Variablen werden für den Daemon benutz, der eine Minute vor dem geplanten Neustart
# gestartet wird und die Meldung bringt.
warndefercal=$(($(/bin/date +%s) + warndelayint))
warnhour=$(/bin/date -j -f "%s" "$warndefercal" "+%H")
warnminute=$(/bin/date -j -f "%s" "$warndefercal" "+%M")
# Variablen für 5minWarning Daemon
# Dieses Variablen werden für den Daemon benutz, der 5 Minute vor dem geplanten Neustart
# gestartet wird und die Meldung bringt.
warner=$(($(/bin/date +%s) + warndelayfivemin))
behour=$(/bin/date -j -f "%s" "$warner" "+%H")
beminute=$(/bin/date -j -f "%s" "$warner" "+%M")
#################################### Variablen Massage / Icons ####################################
InfoIcon="/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ToolbarInfo.icns"
RestartIcon="/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Sync.icns"
RestartMessage="Das System wird in 1 Minute neugestartet. Es erfolgt kein weiterer Hinweis.
The system will restart in 1 minute. There is no further notice."
InfoMessage="Das System wird aufgrund deiner Auswahl um $hour:$minute Uhr neu gestartet.
The system will restart at $hour:$minute o'clock based on your selection
"
ShutdownMessage="Das System wird jetzt aufgrund deiner Auswahl neu gestartet.
Das System wird für den Neustart vorbereitet.
The system will restart now based on your selection.
The system is being prepared for a restart.
"
FiveMinShutdownMessage="Das System wird aufgrund deiner Auswahl in 5 Minuten neu gestartet.
The system will restart in 5 minutes based on your selection.
"
#################################### Create deamen ####################################
FiveMinWarningDaemon()
{
/bin/cat <<EOF > /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
<?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>de.ing.FiveMinWarningScript</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Library/Application Support/JAMF/ING/FiveMinWarningScript.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>$behour</integer>
<key>Minute</key>
<integer>$beminute</integer>
</dict>
</dict>
</plist>
EOF
}
LastWarningDaemon()
{
/bin/cat <<EOF > /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
<?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>de.ing.LastWarningDaemon</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Library/Application Support/JAMF/ING/LastWarningScript.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>$warnhour</integer>
<key>Minute</key>
<integer>$warnminute</integer>
</dict>
</dict>
</plist>
EOF
}
#################################### Create Script ####################################
InfoRestart()
{
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$RestartIcon" -title "Info" -description "$InfoMessage" -button1 "OK" -defaultButton 1 -timeout 60
}
FiveMinWarningScript()
{
/bin/cat <<EOF > /Library/Application\ Support/JAMF/ING/de.ing.FiveMinWarningScript.sh
#!/bin/bash
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$InfoIcon" -title "Restart in five minutes" -description "$FiveMinShutdownMessage" -button1 "OK" -defaultButton 1 -timeout 60
launchctl remove de.ing.FiveMinWarningScript.plist
/bin/rm -f /Library/LaunchDaemons/de.ing.FiveMinWarningScript.plist
EOF
}
# Sicherstellung, dass der Neustart eine Minute nach der Meldung erfolgt.
# Bassierend auf der Auswahlt, die der User getroffen hat.
# Neustart wird nicht verzögert. Unaghängig ob der User in der letzten Meldung auf OK klickt oder nicht wird der Neustart
# zu der geplanten Zeit ausgeführt.
# Gemäß der der "man shutdown" kann die Option wie folgt gelegt werden:
# -r The system is rebooted at the specified time.
# The hours and minutes in the second time format may be separated by a colon (``:'') for backward compatibility.
# Anschliessend wird das Script den Daemon wieder löschen. Das Script bleibt erhalten.
# Beim nächsten ausführen der Policy wird das Script überschrieben und die neuen Variablen übernehmen.
LastWarningScript()
{
/bin/cat <<EOF > /Library/Application\ Support/JAMF/ING/de.ing.LastWarningScript.sh
#!/bin/bash
shutdown -r $hour:$minute
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$InfoIcon" -title "Warning" -description "$RestartMessage" -button1 "OK" -defaultButton 1 -timeout 45
launchctl remove de.ing.LastWarningDaemon.plist
/bin/rm -f /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
EOF
}
shutdownWarning()
{
/Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -windowType utility -icon "$InfoIcon" -title "Warning" -description "$ShutdownMessage" -button1 "OK" -defaultButton 1 -timeout 45
# shutdown -r +1
}
#################################### Load Daemon and Script ####################################
StartandLoadFiveMin()
{
# set ownership on LastWarningDaemon launch daemon
/usr/sbin/chown root:wheel /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
/bin/chmod 644 /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
#load launchd
launchctl load /Library/LaunchDaemons/de.ing.FiveMinWarningDaemon.plist
#set ownership for Script
/usr/sbin/chown root:admin "/Library/Application Support/JAMF/ING/de.ing.FiveMinWarningScript.sh"
/bin/chmod 755 "/Library/Application Support/JAMF/ING/de.ing.FiveMinWarningScript.sh"
}
StartandLoadMaster()
{
# set ownership on LastWarningDaemon launch daemon
/usr/sbin/chown root:wheel /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
/bin/chmod 644 /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
#load launchd
launchctl load /Library/LaunchDaemons/de.ing.LastWarningDaemon.plist
#set ownership for Script
/usr/sbin/chown root:admin "/Library/Application Support/JAMF/ING/LastWarningScript.sh"
/bin/chmod 755 "/Library/Application Support/JAMF/ING/LastWarningScript.sh"
}
#################################### Ausführung ####################################
if [[ "$buttonClicked" == "2" ]] && [[ ! -z "$delayint" ]] && [[ $delayint -gt 900 ]]
then
echo "option 1 länger als 15 min. 5 min vor dem Start eine Meldung und eine min "
FiveMinWarningScript
LastWarningDaemon
InfoRestart
FiveMinWarningDaemon
LastWarningScript
StartandLoadFiveMin
StartandLoadMaster
else
if [[ "$buttonClicked" == "2" ]] && [[ ! -z "$delayint" ]]
then
echo "option 2 unter 15 Min. Warnung nur 1 min vor dem Neustart"
LastWarningDaemon
InfoRestart
LastWarningScript
StartandLoadMaster
elif [ "$buttonClicked" == "1" ]
then
shutdownWarning
fi
fi