cronutil | ||
.gitignore | ||
confutil.py | ||
LICENSE | ||
README.md | ||
sendmail.py | ||
simplewc.py |
utils
Small tools needed to solve immediate tasks independently or as part of a project
cronutil
Description: Control wrapper for the schedule package
Dependencies: Python 3 (tested version 3.9.5)
Scheduler works only on a weekly scale. This is due to the use of the schedule package .
Target format: wD:HH:MM:SS, where:
wD - day of week unit: '1'
, '2'
, ... , '6'
, '7'
, '*'
HH - hour unit in 24-hours format: '00'
, '01'
, ... , '22'
, '23'
, '**'
MM - minute unit: '00'
, '01'
, ... , '58'
, '59'
, '**'
SS - second unit: '00'
, '01'
, ... , '58'
, '59'
, '**'
Units can be listed separated by commas.
Examples:
'*:**:**:**'
- every second of every minute of every hour of every day
'*:**:**:*5'
- every 05,15,25,35,45,55 seconds of every minute of every hour of every day
'*:2*:**:**'
- every second of every minute of every 20,21,22,23 hours of every day
'*:2*:**:*5'
- every 05,15,25,35,45,55 seconds of every minute of every 20,21,22,23 hours of every day
'3,5:2*:**:*5'
- every 05,15,25,35,45,55 seconds every minute every 20,21,22,23 hours of Wednesday, Friday
'1,7:12:00:**'
- every second 00 minutes 12 hours of Monday, Sunday
'1:07:00:00'
- every 00 seconds 00 minutes 07 hours Monday
Example usage in Python:
from time import strftime
from cronutil import Scheduler
def now():
print(strftime('%Y.%m.%d %H:%M:%S'))
cron = Scheduler()
cron.add('2,4:**:*0:00,15,30,45', now)
cron.start()
cron.add('2,4:**:59:59', cron.stop)
confutil
.py
Description: Parser of configs, arguments, parameters
Dependencies: Python 3 (tested version 3.9.5)
Example config to parse:
[main]
# This block contains basic parameters
[httpd]
# This block contains parameters for the http server
# Address to which to bind listening
#address=0.0.0.0;
# Port to which to bind listening. Port below 1024 requires root privileges.
port=8800;
# Working directory (available to everyone)
directory=www;
Example usage in Python:
from os import path
from confutil import Parse
conf = path.splitext(__file__)[0] + '.conf'
if path.exists(conf):
print(Parse(parameters=conf, block='httpd'))
sendmail
.py
Description: Sending email from Python
Dependencies: Python 3 (tested version 3.9.5)
PARAMETERS | DESCRIPTION | DEFAULT |
---|---|---|
-u, --user | smtp valid user | REQUIRED |
-p, --pass | smtp valid password | REQUIRED |
-d, --dest | destination addresses | REQUIRED |
[-h] | print help and exit | |
[--smtp] | smtp hostname or ip address | smtp.gmail.com |
[--port] | smtp port number | 587 |
[--stls] | smtp required TLS | True |
[--from] | mail from alias | --user value |
[--subj] | mail subject | 'no subject' |
[--text] | mail body text | 'no text' |
[--type] | mail body type: plain, html | plain |
[--file] | mail attachment files | None |
[--time] | minutes of attempts to send | 3 |
Example usage in terminal with Python:
python3 ./sendmail.py -u user@gmail.com -p pass -d addr1@gmail.com,addr2@gmail.com
Example usage in terminal with make the script executable:
chmod u+x ./sendmail.py
./sendmail.py -u user@gmail.com -p pass -d addr1@gmail.com,addr2@gmail.com
Example usage in Python:
from sendmail import Mail
msg = Mail(smtp_user='user@gmail.com', smtp_pass='pass', mail_dest='addr1@gmail.com,addr2@gmail.com')
log = msg.send()
print(log)
simplewc
.py
Description: Update Let's Encrypt wildcard certificate with DNS-01 challenge
Dependencies: Python 3 (tested version 3.9.5),
installed or downloaded acme.sh,
installed dnspython package,
dns is supported to dynamic update
PARAMETERS | DESCRIPTION | DEFAULT |
---|---|---|
--domain | domain for which the wildcard certificate is issued | REQUIRED |
--server | master server containing the domain zone | REQUIRED |
--keyname | name of the key to update the zone | REQUIRED |
--keydata | content of the key to update the zone | REQUIRED |
[-h] | print help and exit | |
[--acmepath] | alternative path to bin (example: ~/.acme.sh/acme.sh) | None |
[--force] | "force" argument for the acme.sh | False |
[--test] | "test" argument for the acme.sh | False |
Example usage in cron with Python:
# at 00:00 on Monday
0 0 * * 1 /usr/bin/python3 ~/simplewc.py --domain EXAMPLE.COM --server 8.8.8.8 --keyname KEY --keydata YOU_KEY_CONTENT > /dev/null
# 00:00 on day-of-month 1 and 15
0 0 1,15 * * /usr/bin/python3 ~/simplewc.py --domain EXAMPLE.COM --server dyn.dns.he.net --keyname - --keydata YOU_DDNSKEY > /dev/null
Example usage in terminal with make the script executable:
chmod u+x ./simplewc.py
./simplewc.py --domain EXAMPLE.COM --server 8.8.8.8 --keyname KEY --keydata YOU_KEY_CONTENT --test --force
./simplewc.py --domain EXAMPLE.COM --server dyn.dns.he.net --keyname - --keydata YOU_DDNSKEY --test --force