I am working on a project. Below are the files from which the problem resides.
cli.py
import click
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler(daemon=True)
def func():
print("scheduler running with interval....")
@click.command()
@click.option('--interval', type=int, default=5, help='Interval for the scheduler in seconds')
def start_scheduler(interval):
scheduler.add_job(func, 'interval', seconds=interval)
scheduler.start()
try:
# Keep the script running (use Ctrl+C to stop it)
while True:
pass
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
@click.command()
def stop_scheduler():
if scheduler.running:
scheduler.shutdown()
print("scheduler shut down")
else:
print("scheduler is not running")
@click.command()
def status_scheduler():
if scheduler.running:
print("Scheduler is running.")
else:
print("Scheduler is not running.")
setup.py
""" This file is used for packaging the source code and command line interface"""
from setuptools import setup
setup(
name='test_package',
version='0.1.0',
packages=['my_pack'],
install_requires=['click','APScheduler'],
entry_points={
'console_scripts': [
'start = my_pack.cli:start_scheduler'
'status = my_pack.cli:status_scheduler',
'stop = my_pack.cli:stop_scheduler',
],
},
)
Output i am getting :
when i run start command on terminal it's not running in the background.
to exit from the the script need to hit ctl+C
i am using virtual environment in Ubuntu.
Expected output :
when i give start command it should return me shell to type another commands and should run in the background until it's stopped manually.
$ start
$
python version : Python 3.10.12
Platform : #40~22.04.1-Ubuntu



You should probably make this into a systemd unit. That lets you start and stop the scheduler process at will (using
systemctl start myserviceorsystemctl stop myservice, respectively), in addition to allowing you to start it at system boot time.One alternative would be to use systemd timers instead, if you just want to run a Python script every minute and it doesn't have a lot of startup overhead. Then you wouldn't need APScheduler either.