There are three types of dyno configurations available on Heroku:
- Web -- receives web traffic.
- Worker -- keeps processing tasks/queues in the background.
- One-off -- executed once. e.g.: backup.
If you're interested in running a script, do not care about receiving web traffic on it, and don't have a queue to process, then One-off dynos are likely what you'll want to use. This would be useful for database migrations or backups and whatnot.
Minimal example below.
Sample one-off dyno with Heroku and python AKA “hello world”
This assumes you have already created your app on Heroku and are able to use Herolu CLI from the command-line.
A minimal “hello world” Python script would then look like this. Only 2 files required:
requirements.txt Required, but can be left empty.
task.py with content print("hello world")
Then deploy to Heroku, e.g.:
git add .;
git commit -m "My first commit";
git push heroku master
After that, you'll be able to run your script with heroku run python task.py (and should see the long-awaited hello world in the output.)
If you want to run your program at specific times, use the free Heroku Scheduler add-on.
FYI, Procfile is optional. If you set it to hello: python task.py then you'll be able to run your program with just heroku run hello.
(Note that leaving requirements.txt empty will trigger You must give at least one requirement to install (see "pip help install") warnings on deploy. It's just a warning though and doesn't prevent proper deployment of the program.)
python hi.pyapp[web.1]: hello heroku[web.1]: State changed from starting to crashed heroku[web.1]: Process exited with status 0 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=jar1.herokuapp.com request_id=f86bf99b-862c-428a-a123-dcfdc1cb29dd fwd="117.245.47.245" dyno= connect= service= status=503 bytes= 2016-02-16T17:37:20.610858+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico"