Для этого есть команда; он называется tee
:
users | tee file | wc -w
PS. (Внешние) команды не различаются между оболочками; Синтаксис перенаправления ввода и вывода различается.
Я считаю, что такого пути не существует, по крайней мере из -из -блока -(в виде директивы модуля systemd или что-то в этом роде ). Однако это, безусловно, выполнимо вне systemd.
Было бы неплохо, если бы systemd поддерживала запуск по событию -на основе (по аналогии с udev )или позволяла настраивать автоматически -сгенерированные юнит-файлы. Любая идея, если она будет реализована, решит эту проблему, но на самом деле обе являются давними -недостатками systemd.
Вы можете попытаться реализовать эту логику самостоятельно. Если я правильно понимаю, чего вы на самом деле пытаетесь достичь, вам нужна семантика «отсрочки» запуска -до тех пор, пока сеанс не станет активным, а не «пропуск» запуска -, если сеанс неактивен, когда срабатывает таймер.
Тогда основной идеей будет иметь демон, который запускается как пользовательская служба systemd, прослушивает события изменения состояния logind на системной шине и соответственно запускает/останавливает таймер. Это должно быть легко выполнимо в Python (, к сожалению, о bash не может быть и речи, потому что нет дружественных к оболочке -инструментов, позволяющих прослушивать сигналы на шине D -).
Похоже (из строки USER=$(whoami)
в вашем скрипте ), что вы запускаете эту службу как не -пользователь root (, вероятно, установив User=
в файле daily-backup.service
.)
Возможно, вы захотите настроить службы и таймеры как пользовательские службы, вместо этого запускаемые менеджером systemd --user
.
Для этого просто создайте daily-backup.service
и daily-backup.timer
в каталоге ~$USER/.config/systemd/user/
. По сути, вы можете использовать файлы, которые вы создали в системном каталоге, по большей части без изменений. (Вы можете удалить ссылку на User=
, так как это будет пользователь, для которого вы ее настраиваете.)
Используйте команды systemctl --user...
для их включения и запуска, а также для проверки состояния. Для раздела установки используйте:
[Install]
WantedBy=default.target
Поскольку менеджер пользователей знает только о default.target
(, а не, например. multi-user.target
.)
Чтобы пользовательский сеанс запускался при загрузке, вы можете включить задержку, и в этом случае он запустится раньше и задержится:
loginctl enable-linger $USER
(См. документацию по loginctl enable-linger
.)
На самом деле, глядя на статью в журнале Fedora Magazine, на которую вы ссылались, кажется, что именно это они и имели в виду. Часть «Автоматизация с помощью таймера» содержит ссылки на $HOME/.config/systemd/user/
.
Если вы хотите узнать больше о юнитах пользователя systemd, в Arch Linux Wiki есть хорошая статья об этом .