No project description provided
Project description
Zapusk
Zapusk is a versatile job runner designed for desktop environments. It simplifies the process of managing background tasks by providing robust features such as pre-configured job execution, background shell command execution, cron-like scheduling, log tailing, and notifications. Zapusk's detailed JSON output also enables powerful data manipulation and analysis when paired with tools like jq.
Table of Contents
Key Features
- Preconfigured Jobs: Run jobs defined in your configuration files.
- Background Command Execution: Run shell commands in the background with optional log tailing.
- Cron-like Scheduling: Schedule tasks using flexible cron syntax.
- Log Tailing: View logs in real-time.
- Job Management: Cancel running jobs and check their statuses.
- Job Groups: Share settings like callbacks and parallelism between jobs.
- Colored JSON Output: Easily readable JSON output.
- Waybar Integration: Display job statuses and notifications on Waybar.
- Custom Working Directory: Run scripts and callbacks in a specified working directory.
Installation
Install Zapusk using pip:
pip install zapusk
Usage
Zapusk requires zapusk-server to be started. Zapusk offers a command-line interface for managing and executing jobs. Here's a quick reference:
Basic Commands
Usage:
zapusk -h | --help
zapusk --version
zapusk run <job_config_id> [--colors|--no-colors] [--tail]
zapusk exec <command> [--name=<name>] [--group=<group>] [--tail] [--schedule=<cron_expression>] [--colors|--no-colors]
zapusk cancel <job_id> [--scheduled] [--colors|--no-colors]
zapusk tail <job_id>
zapusk list [--filter=<state>|--scheduled] [--colors|--no-colors]
zapusk config_jobs [--colors|--no-colors]
zapusk config_groups [--colors|--no-colors]
zapusk waybar
Options:
-h --help Show this screen.
--version Show version.
--colors Enable colors.
--no-colors Disable colors.
--filter=<state> Filter jobs by status.
-n --name=<name> Name for a command.
-g --group=<group> Job group to run the command in.
-t --tail Tail logfile immediately.
Examples
# Run npm install in the background
zapusk exec "npm i"
# Run pytest and tail its log
zapusk exec "pytest -v" -t
# Schedule a command to run every minute
zapusk exec "ping -c4 google.com" --schedule "*/1 * * * *"
# Run a job defined in ~/.config/zapusk/config.yaml
zapusk run youtube_dl
# Cancel a job by its ID
zapusk cancel 42
# See logs for a job by its ID
zapusk tail 42
Configuration
Here is an example configuration file for Zapusk. It defines job groups and individual jobs, specifying commands, schedules, notifications, and working directories.
# The port the server starts on and the client connects to
port: 9876
# Enable colored JSON output
colors: True
job_groups:
- id: unsplash
parallel: 1
- id: sleep
parallel: 2
- id: cmd
parallel: 10
on_finish: notify-send -a "zapusk" "Command Finished" "{job.name} has finished" --icon kitty
on_fail: notify-send -a "zapusk" "Command Failed" "{job.name} has failed" --icon kitty
- id: cronie
parallel: 1
on_finish: notify-send -a "zapusk" "Scheduled Job Finished" "{job.name} has finished" --icon kitty
on_fail: notify-send -a "zapusk" "Scheduled Job Failed" "{job.name} has failed" --icon kitty
jobs:
- name: Unsplash Download
id: unsplash
args_command: "zenity --entry --text 'Collection ID'"
command: ~/.bin/jobs/unsplash_dl.sh
cwd: /path/to/working/directory
- name: Sleep
id: sleep
group: sleep
args_command: "zenity --entry --text 'Sleep Time'"
command: sleep
on_finish: notify-send -a "zapusk" "Job Finished" "{job.name} has finished" --icon kitty
on_fail: notify-send -a "zapusk" "Job Failed" "{job.name} has failed" --icon kitty
- name: Cronie
id: cronie
group: cronie
schedule: "*/10 * * * *"
command: sleep 2
Advanced Usage
Running Preconfigured Jobs
Run jobs defined in your configuration file using their id.
# Job configuration in ~/.config/zapusk/config.yaml
jobs:
- name: Unsplash Download
id: unsplash
args_command: "zenity --entry --text 'Collection ID'"
command: ~/.bin/jobs/unsplash_wallpaper_collection_download.sh
cwd: /path/to/working/directory
on_finish: notify-send -a "Zapusk" "Wallpapers downloaded" --icon kitty
on_fail: notify-send -a "Zapusk" "Wallpaper download failed" --icon kitty
# Run the `unsplash` job:
zapusk run unsplash
Background Command Execution
Run commands in the background with optional log tailing:
zapusk exec "npm i" -t
Scheduling Commands
Schedule commands to run at specific intervals using cron syntax:
zapusk exec "ping -c4 google.com" --schedule "*/1 * * * *"
Pre-configured jobs can also be scheduled:
jobs:
- name: Cronie
id: cronie
group: cronie
schedule: "*/10 * * * *"
command: sleep 2
Managing Jobs
Cancel a running or scheduled job by its ID:
zapusk cancel 42
Tail the logs of a running job by its ID:
zapusk tail 42
List all pending, running, and finished jobs:
zapusk list
Callbacks
Use on_finish and on_fail callbacks for notifications.
For job group callbacks:
job_groups:
- id: my_group
parallel: 10
on_finish: notify-send -a "zapusk" "Command Finished" "{job.name} has finished" --icon kitty
on_fail: notify-send -a "zapusk" "Command Failed" "{job.name} has failed" --icon kitty
For individual job callbacks:
jobs:
- name: Sleep
id: sleep
group: sleep
command: ~/.bin/jobs/sleep
cwd: /path/to/working/directory
on_finish: notify-send -a "zapusk" "Job Finished" "{job.name} has finished" --icon kitty
on_fail: notify-send -a "zapusk" "Job Failed" "{job.name} has failed" --icon kitty
Waybar Integration
Zapusk integrates with Waybar to display job statuses and notifications directly on your desktop.
// Example integration with wofi and jq
"custom/zapusk": {
"exec": "zapusk waybar",
"on-click": "zapusk config_jobs --no-colors | jq -r \".[].id\" | wofi --dmenu | xargs -I{} zapusk run {}",
"tooltip": true,
"return-type": "json",
"format": "{}",
"interval": 1
}
License
Zapusk is licensed under the MIT License. See the LICENSE file for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zapusk-0.1.1.tar.gz.
File metadata
- Download URL: zapusk-0.1.1.tar.gz
- Upload date:
- Size: 33.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.4 Linux/6.5.0-1023-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5408168854c7c97e2d65ec831d92af492121a58e8cab10ad2b78ee6b36e45e48
|
|
| MD5 |
fccef1a3e4922e1159ea64e18dffa4ae
|
|
| BLAKE2b-256 |
49877474a678c11ef19debebca480f013e9bffa0c259c97d397520feb119a366
|
File details
Details for the file zapusk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: zapusk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 60.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.4 Linux/6.5.0-1023-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4ca53aeaa4beba351dc2bf2fba63d6fd5148a37bc0fdaeefcda1baf63dbdb05
|
|
| MD5 |
b4f2af686da679af64ae5bec8a46b21e
|
|
| BLAKE2b-256 |
a817574486fb0ef39b59ad02a80fffadb73d22a5a04f4950aa4fc5d0c86ef6bc
|