DEV Community

Cover image for Create Alarm Clocker Using Python And SystemD
πŸš€ Vu Dao πŸš€
πŸš€ Vu Dao πŸš€

Posted on

Create Alarm Clocker Using Python And SystemD

βš›οΈ πŸ“„ πŸš€

Python For Fun

Make alarm clocker by using combine of systemD, python, and slackbot

Create SystemD service

  • The service will start along with your machine and running background process to check clocker
⚑ $ cat Clocker.service 
[Unit]
Description=Polling check clocker alarm
Requires=network.target
After=multi-user.target

[Service]
Type=forking
PIDFile=/var/run/clocker_polling.pid
ExecStart=/opt/ops/clocker_polling.sh

StandardOutput=/var/log/clocker-alarm.log
StandardError=/var/log/clocker-alarm.error

Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Create wrapper script to start service

⚑ $ cat /opt/ops/clocker_polling.sh 
#!/bin/bash
rm -f /var/run/clocker_polling.pid
python3 /opt/ops/clocker.py &
echo $! > /var/run/clocker_polling.pid

⚑ $ sudo chmod +x /opt/ops/clocker_polling.sh
Enter fullscreen mode Exit fullscreen mode

Python script to run process

⚑ $ cat /opt/ops/clocker.py 
import os
import requests
import time
from datetime import datetime
import json


class SlackWebHook:
    """ Send payload to slack """
    def __init__(self):
        self.webhook_url = 'https://hooks.slack.com/services/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'
        self.footer_icon = 'https://cdn2.iconfinder.com/data/icons/construction-2-15/65/65-512.png'
        self.slack_id = 'UU1111UU'

    def send_slack(self, msg):
        """ Send alarm to slack """
        color = '#750202'
        level = ':boom: ALERT :boom:'
        curr_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

        message = f"<@{self.slack_id}> {msg}"
        slack_payload = {"username": "Hurry-up",
                         "attachments": [{"fallback": "Required plain-text summary of the attachment.",
                                          "pretext": level,
                                          "color": color,
                                          "text": message,
                                          "footer": curr_time,
                                          "footer_icon": self.footer_icon}]}
        requests.post(self.webhook_url, data=json.dumps(slack_payload), headers={'Content-Type': 'application/json'})


if __name__ == '__main__':
    while 1:
        now = datetime.now()
        if now.hour == 23 and now.minute == 3:
            slack = SlackWebHook()
            slack.send_slack("*Report to the boss now!!!*")
            time.sleep(5)
        else:
            time.sleep(15)
Enter fullscreen mode Exit fullscreen mode

Start systemD service

⚑ $ sudo cp Clocker.service /lib/systemd/system/
⚑ $ systemctl start Clocker.service
⚑ $ systemctl status Clocker.service
● Clocker.service - Polling check clocker alarm
     Loaded: loaded (/lib/systemd/system/Clocker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-12-27 22:04:31 +07; 57min ago
    Process: 99372 ExecStart=/opt/ops/clocker_polling.sh (code=exited, status=0/SUCCESS)
   Main PID: 99379 (python3)
      Tasks: 1 (limit: 18998)
     Memory: 16.9M
     CGroup: /system.slice/Clocker.service
             └─99379 python3 /opt/ops/clocker.py

Dec 27 22:04:31 jackdao systemd[1]: Starting Polling check clocker alarm...
Dec 27 22:04:31 jackdao systemd[1]: Started Polling check clocker alarm.
Enter fullscreen mode Exit fullscreen mode

Enjoy!

  • The service will send slack message to your slack-channel at 23:03 every day

Mirror:

🌠 Blog · Web · Linkedin · Group · Page · Twitter 🌠

Top comments (2)

Collapse
 
tuannguyen91vn profile image
Blake (Tuan Nguyen)

So fun

Collapse
 
zdev1official profile image
ZDev1Official

Cool!