Chamar halt
, shutdown
ou reboot
da cron
é uma solução mais limpa, porque d-bus
é apenas sistema de mensagens e o cron já chama como raiz. Mas se você precisar informar sobre o desligamento para outros aplicativos através do d-bus, tente chamar isto:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop