vikram7

vikram7

I currently have a task that runs once an hour. This is pretty straightforward using a GenServer. I can call Process.send_after(self(), :work, @interval) in the handle_info/2 function of that module.

If I need to run another task once every day at 8AM UTC, what would be a good way to do this natively (without any external libraries)? Is there something equivalent to Process.send_after except at a specific time?

Showing Posts 1 to 10

idi527

idi527

I would calculate the initial_interval to 8AM on init, and then send_after 24 hours every time after that.

efrenfuentes

efrenfuentes

You can check Quantum, you can config it like cron:

config :quantum, :your_app,
  cron: [
    # Every minute
    "* * * * *":      {"Heartbeat", :send},
    # Every 15 minutes
    "*/15 * * * *":   fn -> System.cmd("rm", ["/tmp/tmp_"]) end,
    # Runs on 18, 20, 22, 0, 2, 4, 6:
    "0 18-6/2 * * *": fn -> :mnesia.backup('/var/backup/mnesia') end,
    # Runs every midnight:
    "@daily":         &Backup.backup/0
  ]
davearonson

davearonson

Speaking of cron, is there some reason this task couldn’t be done through cron? (Or at least triggered by something done through cron?) Sorry if that’s “Just Not Done” in the Elixir world, I’m too new to have a good sense of that – some say I lack good sense at all… %-)

StanBright

StanBright

@davearonson, in most cases it’s a better approach to have the scheduling service/system/config as part of your app. It’s easier to deploy and manage that way.

dwahyudi

dwahyudi

I also use quantum in two of my projects. It does amazing job.

minhajuddin

minhajuddin

It is possible to use cron to schedule your jobs. The deployment story is not very good, but if you are up to using ruby, you can use GitHub - javan/whenever: Cron jobs in Ruby · GitHub to setup your job and run whenever --update-crontab. One of us should write a whenever runner for distillery.

You can use cron jobs even without using whenever for configuration updates. If you are using Distillery you could put the following in your crontab

0 0 8 1/1 * ? * /opt/www/myapp/bin/app_name rpc Elixir.ScheduledTask run

where our module is

defmodule ScheduledTask def
  def run
    # our code
  end
end
Forseth

Forseth

Quantum is fantastic using it in all my applications at the moment, never had any issues

manukall

manukall

One thing to keep in mind when using Process.send_after for something like this is that your app might get restarted in between and that message won’t get send.
You could work around that by scheduling a message again on application startup, though.

rkmax

rkmax

Did you have some example not the questum part it self, more like the way how to start that cron, example: for start the web app I run mix phoenix.server how to do that for cron like mix start-cron?

minhajuddin

minhajuddin

You are looking for mix run

~ $ mix help run 

                                    mix run                                     

Runs the given file or expression in the context of the application.

You can use this task to execute a particular file or command:

    mix run -e Hello.world
    mix run my_script.exs

This task provides a subset of the functionality available in the elixir
executable, including setting up the System.argv/0 arguments:

    mix run my_script.exs arg1 arg2 arg3

You can also use this task to simply start an application and keep it running
without halting:

    mix run --no-halt

Before running any command, the task compiles and starts the current
application. Those can be configured with the options below.

You may also pass options specific to the elixir executable as follows:

    elixir --sname hello -S mix run --no-halt

## Command line options

  • --config, -c  - loads the given configuration file
  • --eval, -e - evaluate the given code
  • --require, -r - requires pattern before running the command
  • --parallel, -p - makes all requires parallel
  • --no-compile - does not compile even if files require compilation
  • --no-deps-check - does not check dependencies
  • --no-archives-check - does not check archives
  • --no-halt - does not halt the system after running the command
  • --no-mixexs - allows the command to run even if there is no mix.exs
  • --no-start - does not start applications after compilation
  • --no-elixir-version-check - does not check the Elixir version from
    mix.exs

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New
rahultumpala
Hello, I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews