{"id":16731605,"url":"https://github.com/joxit/runtasktic","last_synced_at":"2025-10-03T20:52:35.253Z","repository":{"id":57664262,"uuid":"270113520","full_name":"Joxit/runtasktic","owner":"Joxit","description":"Fantas(k)tic command-line for execution of regular long sequential or parallel tasks","archived":false,"fork":false,"pushed_at":"2025-06-16T22:02:04.000Z","size":205,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-08-31T02:21:09.754Z","etag":null,"topics":["command-line","nohup","notification","rust","slack","task-manager","task-runner","task-scheduler"],"latest_commit_sha":null,"homepage":"https://joxit.dev/runtasktic","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Joxit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-06-06T21:49:48.000Z","updated_at":"2025-06-16T22:02:07.000Z","dependencies_parsed_at":"2024-01-01T23:55:55.572Z","dependency_job_id":"4941919f-d183-460c-9373-2c7cabfd1df7","html_url":"https://github.com/Joxit/runtasktic","commit_stats":{"total_commits":68,"total_committers":2,"mean_commits":34.0,"dds":0.02941176470588236,"last_synced_commit":"4125700968a01b5d41b887160c2ec91ab8287e71"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/Joxit/runtasktic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joxit%2Fruntasktic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joxit%2Fruntasktic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joxit%2Fruntasktic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joxit%2Fruntasktic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Joxit","download_url":"https://codeload.github.com/Joxit/runtasktic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joxit%2Fruntasktic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278227255,"owners_count":25951883,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-03T02:00:06.070Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","nohup","notification","rust","slack","task-manager","task-runner","task-scheduler"],"created_at":"2024-10-12T23:38:06.251Z","updated_at":"2025-10-03T20:52:35.248Z","avatar_url":"https://github.com/Joxit.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# runtasktic\n\n[![Rust](https://github.com/Joxit/runtasktic/workflows/Rust/badge.svg)](https://github.com/Joxit/runtasktic/actions?query=workflow%3ARust)\n[![Crates.io version shield](https://img.shields.io/crates/v/runtasktic.svg)](https://crates.io/crates/runtasktic)\n[![Crates.io license shield](https://img.shields.io/crates/l/runtasktic.svg)](https://crates.io/crates/runtasktic)\n\nRuntasktic is a _fantastic_ command-line task management tool for execution of regular long sequential or parallel tasks.\n\nThere are often tasks that we repeat several times in predefined orders. Some of these tasks can take time and we would like to be notified when it ends. This is why this project exists.\n\nDescribe your tasks in a YAML file, execute all of them with runtasktic in foreground or background. Configure the notification system, and be notified at the end of each task or when they are all finished. Onlyt Slack is supported right now, need more ? Submit a Feature Request or Pull Request.\n\n## When should I need runtasktic ?\n\n- when you have a redundant long running task list\n- when you need a notification after a long task completion\n- when you need an alternative to nohup\n- when you need an alternative to crontab\n\n## How to install runtasktic ?\n\nYou can install runtasktic via command line or by downloading the prebuild version on github. :warning: the project uses libc, the prebuilt version will work only on OS using the same libc version as GitHub Action at the build time.\n\n```bash\nmkdir ~/bin\ncurl -sSL https://github.com/Joxit/runtasktic/releases/download/$(curl -sSL https://api.github.com/repos/Joxit/runtasktic/releases/latest | jq -r '.tag_name')/runtasktic-linux-x86_64 \u003e ~/bin/runtasktic\nchmod +x ~/bin/runtasktic\n```\n\nIf you are a rust user, you can use cargo to install runtasktic.\n\n```bash\ncargo install runtasktic\n```\n\nIf you already installed runtasktic, you can updated it with commandline\n\n```bash\nruntasktic update\n```\n\n## CLI\n\n```\nCommand-line task management tool for execution of regular long sequential or parallel tasks.\n\nUsage: runtasktic \u003cCOMMAND\u003e\n\nCommands:\n  run         Run all tasks from your configuration in background or foreground\n  dot         Export the configuration to a graph (needs graphviz/dot)\n  exec        Execute a single command with notification in background or foreground\n  completion  Generate completion script for your shell\n  update      Self update of the binary\n  help        Print this message or the help of the given subcommand(s)\n\nOptions:\n  -h, --help     Print help\n  -V, --version  Print version\n```\n\n### Run: all tasks of a configuration file\n\n```\nRun all tasks from your configuration in background or foreground.\n\nSet the notification, messages, output files, concurency, working directory and many more options in your configuration.\n\nUsage: runtasktic run [OPTIONS] [CONFIG]...\n\nArguments:\n  [CONFIG]...\n          Configurations path (YAML)\n\nOptions:\n  -s, --start \u003cSTARTS\u003e\n          Override the starting task if the job had already been started before. When using many configuration files, start states must be in the first configuration file. Can be many task ids with comma separated values\n\n  -b, --background\n          Run the task in background\n\n      --cron \u003cCRON\u003e\n          Schedule your tasks using cron expression\n\n  -h, --help\n          Print help (see a summary with '-h')\n```\n\n### Exec: Simple command, just like nohup with notification\n\n```\nExecute a single command with notification in background or foreground.\n\nInherit the notification from a configuration file and set your default one in your home: `~/.runtasktic.yml` or `~/.runtasktic.yaml`.\n\nUsage: runtasktic exec [OPTIONS] [COMMAND]...\n\nArguments:\n  [COMMAND]...\n          Command to execute\n\nOptions:\n  -c, --config \u003cCONFIG\u003e\n          Configuration path (YAML). Will use config file located `~/.runtasktic.yml` or `~/.runtasktic.yaml` by default. If you want no config file execusion, use `--config -`\n\n  -t, --task \u003cTASK\u003e\n          Run a single task from the configuration file\n\n  -b, --background\n          Exec the command in background\n\n      --cron \u003cCRON\u003e\n          Schedule your tasks using cron expression\n\n  -h, --help\n          Print help (see a summary with '-h')\n```\n\n### Dot: Create a graph using graphviz of your configuration file\n\n```\nExport the configuration to a graph (needs graphviz/dot)\n\nUsage: runtasktic dot \u003cCONFIG\u003e \u003cIMAGE\u003e\n\nArguments:\n  \u003cCONFIG\u003e  Path of the configuration file to visualize\n  \u003cIMAGE\u003e   Path for the image. `dot` command is required\n\nOptions:\n  -h, --help  Print help\n```\n\nExample taken from [tests/resources/concurrency.yml](https://github.com/Joxit/runtasktic/blob/main/tests/resources/concurrency.yml) of graph generated by dot.\n\n![Dot Sample](./dot-sample.png)\n\n### Completion: Generate completion script for your shell\n\n```\nGenerate completion script for your shell\n\nUsage: runtasktic completion \u003cCOMMAND\u003e\n\nCommands:\n  bash    Generates a .bash completion file for the Bourne Again SHell (BASH). Save the output in `/etc/bash_completion.d/runtasktic` or `~/.local/share/bash-completion/completions/runtasktic`\n  fish    Generates a .fish completion file for the Friendly Interactive SHell (fish)\n  zsh     Generates a completion file for the Z SHell (ZSH)\n  elvish  Generates a completion file for Elvish\n  help    Print this message or the help of the given subcommand(s)\n\nOptions:\n  -h, --help  Print help\n```\n\n### Update: Update the binary\n\n```\nSelf update of the binary\n\nUsage: runtasktic update\n\nOptions:\n  -h, --help  Print help\n```\n\n## Configuration\n\n```yaml\ntasks:\n  a: # The id of the task\n    commands: # Commands to execute, they must exist with a 0 exit code\n      - echo Begin a\n      - sleep 0.5\n      - echo End a\n    on_failure: exit # `continue` or `exit` when the tasks ends with a non 0 exit code\n  b:\n    commands:\n      - echo Begin b\n      - sleep 0.25\n      - echo End b\n    depends_on: [a] # This task will be executed after a.\nnotification:\n  messages:\n    task_end: Task {task.id} ended with status code {task.status_code} # Availables templates are {task.id}, {task.short_cmd}, {task.full_cmd}, {task.status_code}, {hostname}, {env.*} for environment variables\n    all_task_end: All tasks ended. Got {resume.success} success and {resume.failures} failure. # Availables templates are {resulme.success}, {resume.failures}, {hostname}, {env.*} for environment variables\n    task_failed: Tasks ended prematurely. Got {resume.success} success and {resume.failures} failure. Contains one critical failure. # Availables templates are {resulme.success}, {resume.failures}, {hostname}, {env.*} for environment variables. Triggered when `on_failure: exit` is used.\n  when: always # `always`, `task-end`, `end` or `never` when should I send notification\n  slack: # send notification to slack\n    url: https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX # The slack server url\n    channel: '#channel' # channel to send message\n    emoji: ':rocket:' # emoji to use (optional)\n    username: runtasktic # the username to use, default is runtasktic.\n    when: always # `always`, `task-end`, `end` or `never` when should I send notification\n  print:\n    output: stderr # print notification on `stdout`, `stedrr`, `none` or `/custom/path`\n    when: always # `always`, `task-end`, `end` or `never` when should I send notification\n  email:\n    from:\n      name: Sender Name # Sender's name, default is empty\n      address: sender@example.com # Sender's email\n    to:\n      - name: Receiver Name # Receiver's name, default is empty\n        address: receiver@example.com # Receiver's email\n    subject: 'Runtasktik: task ended' # Default email's subject\n    smtp:\n      hostname: smtp.example.com # SMTP hostname\n      port: 587 # SMTP port, default 587 \n      username: sender@example.com # SMTP username, default is Sender's email\n      secret: secret-password # SMTP password\n      tls: true # Use TLS connexion, default is true\n    when: always # `always`, `task-end`, `end` or `never` when should I send notification\n\nconcurrency: 2 # how many task can run simultaneously\nworking_dir: /custom/directory # Where is the workind directory, default is where your are using runtasktic\nstdout: none # `none`, `/custom/path` where should I save standard logs\nstderr: /var/log/runtasktic.err # `none`, `/custom/path` where should I save error logs\non_failure: continue # `continue` or `exit` default behaviour when a task fail, default is `continue`\n```\n\n### Override configuration\n\nYou can override some of your configuration with environment variables. These variables start with `RUNTASKTIK_*`, all dots are replaced by underscores and everything is uppercase.\nAvailable ones are:\n- `RUNTASKTIK_NOTIFICATION_SLACK_URL`\n- `RUNTASKTIK_NOTIFICATION_SLACK_CHANNEL`\n- `RUNTASKTIK_NOTIFICATION_SLACK_USERNAME`\n- `RUNTASKTIK_NOTIFICATION_EMAIL_SMTP_HOSTNAME`\n- `RUNTASKTIK_NOTIFICATION_EMAIL_SMTP_USERNAME`\n- `RUNTASKTIK_NOTIFICATION_EMAIL_SMTP_SECRET`\n\n### Configuration examples\n\n[Simple sample](https://github.com/Joxit/task-scheduler/blob/master/tests/resources/sample.yml)\n\n[Play with concurrency](https://github.com/Joxit/task-scheduler/blob/master/tests/resources/concurrency.yml)\n\n[Play with notification](https://github.com/Joxit/task-scheduler/blob/master/tests/resources/notification.yml)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoxit%2Fruntasktic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoxit%2Fruntasktic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoxit%2Fruntasktic/lists"}