Systemd User Task Manager

Systemdユーザサービスとタイマーを使ったタスク管理アプリを作成してみました。
https://github.com/ktkr3d/systemd-user-task-manager
2026-05-20
スケジュール文字列のバリデーション機能を追加しました。
https://github.com/ktkr3d/systemd-user-task-manager/releases/tag/v0.2.0
概要
- 指定時刻にコマンドを実行するタスクを管理します。
- タスクはSystemdのユーザサービス/ユーザタイマーのユニットで実現します。このアプリでは
user-task-のプレフィックスで始まるユニットを管理します。ユニットファイルは~/.config/systemd/user/に生成されます。 - 起動スケジュールとしてSystemdカレンダーイベント書式や起動時(X分後)の指定が可能です。
- 配布パッケージはFlatpakです。
環境
環境1
- Arch Linux
- libadwaita 1.9.0
- python-gobject 3.56.3
環境2
- Windows 11 Pro
- WSLg (Arch Linux)
- libadwaita 1.9.0
- python-gobject 3.56.3
- WSLg (Arch Linux)
構築
インストールと実行 (コマンドライン)
- flathub リポジトリ追加
flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
- Flatpakアプリケーションパッケージをダウンロード
https://github.com/ktkr3d/systemd-user-task-manager/releases - Flatpakアプリケーションのインストール
flatpak --user install systemd-user-task-manager.flatpak
- 実行
flatpak run io.github.ktkr3d.systemd-user-task-manager
インストールと実行(ソフトウェア アプリ)
- flathub リポジトリ追加
flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
- Flatpakアプリケーションパッケージをダウンロード
https://github.com/ktkr3d/systemd-user-task-manager/releases systemd-user-task-manager.flatpakをダブルクリック- ソフトウェア アプリ画面で「ローカルファイル▼」をクリックし、「ユーザー」に切り替える。

- 「インストール」
- 「開く」

アンインストール(コマンドライン)
- Flatpakアプリケーションパッケージの削除
flatpak --user uninstall io.github.ktkr3d.systemd-user-task-manager
- (任意)作成されたsystemdユニットファイルの削除
rm ~/.config/systemd/user/user-task-*
アンインストール(ソフトウェア アプリ)
- ソフトウェア アプリで「Systemd User Task Manager」アプリをアンインストール
- (任意)必要に応じてデータの削除を選択
利用
動作確認
- テスト
タスク名実行コマンド(サウンド再生)test
スケジュール(カスタム:毎時0分から2分おきに実行)aplay /usr/share/sounds/alsa/Front_Center.wav
*:0/2
使い方
スケジュール指定のカレンダーイベントの仕様
https://man.archlinux.org/man/systemd.time.7#CALENDAR_EVENTSよく使う設定
実行タイミング 設定例 毎日0時5分 0:05 毎週月曜日 Mon 指定間隔毎に実行する設定
実行タイミング 設定例 毎時 hourly または *:00 毎時0分から5分毎に実行(0分, 5分, 10分, 15分 …) *:0/5 毎時0分から15分毎に実行(0分, 15分, 30分, 45分) *:0/15 毎日 daily または 00:00 毎月1日から3日毎に実行(1日, 4日, 7日, 10日, …) *-01/3 スケジュール指定のチェック方法(次回5回分)
systemd-analyze calendar --iterations=5 '*-01/3'
ログインしていない状態でもタスクを実行する方法
systemd のユーザーインスタンスを自動起動# loginctl enable-linger username
応用:ずんだもん時報
- Windows PC でVOICEVOXをインストール(起動はしない)し、以下コマンドを実行
"%USERPROFILE%\AppData\Local\Programs\VOICEVOX\vv-engine\run.exe" --host 0.0.0.0
- Windows PC のFWで50021/tcpを解放
- Linux PCで以下のシェルを作成
/home/arch/bin/time-signal.sh
HOUR=$(date +%-H)
MINUTE=$(date +%-M)
TEXT="現在、${HOUR}時${MINUTE}分です。"
REMOTEHOST=192.168.11.2
curl -s -X POST "${REMOTEHOST}:50021/audio_query?speaker=1" --get --data-urlencode "text=${TEXT}" > query.json
curl -s -X POST "${REMOTEHOST}:50021/synthesis?speaker=1" -H "Content-Type: application/json" --data-binary @query.json > voice.wav
aplay voice.wav - タスクを作成
タスク名実行コマンドtime-signal
スケジュール(平日朝6〜7時台に0分から5分おきに実行)/home/arch/bin/time-signal.sh
Mon,Tue,Wed,Thu,Fri 6,7:0/5
応用:日次壁紙ダウンロード&切り替え
- 以前作成したスクリプトと設定を参照
https://ktkr3d.github.io/2025/12/21/Systemd-user-timer/ - タスクを作成
タスク名実行コマンドdownload-bing-wallpaper
スケジュール/home/arch/bin/download_bing_wallpaper.py
Persistentをオン5:00
応用:日次ファイル転送&削除
- スクリプトを作成
/home/arch/bin/upload-data.sh
LOCAL_DIR="/home/arch/Downloads"
REMOTE_USER="arch"
REMOTE_HOST="zotac.local"
REMOTE_DEST="/media/media12/home/Downloads"
for file in "$LOCAL_DIR"/*; do
if [ -f "$file" ]; then
scp -- "$file" "$REMOTE_USER"@"$REMOTE_HOST":"$REMOTE_DEST"/ && \
rm -- "$file"
fi
done - ssh-copy-id しておく
ssh-copy-id arch@zotac.local
- タスクを作成
タスク名実行コマンドupload-data
スケジュール/home/arch/bin/upload-data.sh
Persistentをオンdaily
応用:WSL環境で実行
- 以下のファイルでWSLgが無効になっていないか確認
%USERPROFILE%\.wslconfig
- 環境変数設定
~/.bashrc export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus~/.config/fish/config.fish # WSL systemctl --user fix
set -gx XDG_RUNTIME_DIR /run/user/(id -u)
set -gx DBUS_SESSION_BUS_ADDRESS unix:path=$XDG_RUNTIME_DIR/bus - 起動
flatpak run io.github.ktkr3d.systemd-user-task-manager

応用:paruのビルドキャッシュをクリア
- タスクを作成
タスク名実行コマンドparu-cache-clear
スケジュールrm -rf ~/.cache/paru/clone/*
Persistentをオンweekly
TODO
- LANG=C を英語にする
- スケジュール文字列のバリデーション
- 最新の情報に自動更新
- 1つのタスクに複数スケジュール
- 対応言語追加
- インストール処理の改善
Comments



