Создаём в /etc/systemd/system/roulette.service юнит, который с вероятностью 1 к 10 выключает компьютер. В простейшей версии ExecStart запускает bash с проверкой: если $RANDOM % 10 даёт ноль — вызывается systemctl poweroff, иначе пишется «LIVE ANOTHER DAY».
Пользователь HSVSphere из твиттера подсказал более элегантный способ — использовать встроенную опцию ExecCondition=. Она проверяет условие до запуска основной команды. Если условие не выполняется, systemd просто пропускает ExecStart и пишет в журнал чёткое сообщение: «Condition check resulted in 1 in 10 chance to break your chains being skipped». В такой версии ExecCondition содержит ту же проверку на $RANDOM, а ExecStart — уже просто systemctl poweroff. В целом, лучше опираться на родные возможности systemd, чем городить скрипты — это касается и OnFailure= для реакции на сбои, и Restart= для восстановления.
Теперь привязываем сервис к таймеру. Кладём файл roulette.timer рядом, в ту же папку. В секции [Timer] указываем OnCalendar=10:00 — каждый день в десять утра. Таймер сам находит сервис по совпадению имени: по умолчанию Unit= подхватывает roulette.service. Запускать таймер надо через systemctl start roulette.timer — он ставит расписание, но сам сервис не выполняет. Статус покажет, когда сработает триггер.
Важные детали: ExecStart= не запускает команду в шелле, это не труба. Пайпы и редиректы там не работают. Переменные окружения не наследуются — $PATH почти пустой. Поэтому в команде лучше использовать полный путь /usr/bin/env или явно указывать интерпретатор. Сам сервис без [Install] не получится включить через enable, но таймер с WantedBy=timers.target спокойно заводится и работает, поднимаясь при загрузке.