The trick is to only register the listener for events that indicate failure, namely
- PROCESS_STATE_STOPPED
- PROCESS_STATE_EXITED
- PROCESS_STATE_FATAL
Once they do, we should send a SIGQUIT to Supervisor.
| def root= new File('/usr/share') | |
| def full= new File('/usr/share/docs/rpm-4.4') | |
| // Print the relative path of 'full' in relation to 'root' | |
| // Notice that the full path is passed as a parameter to the root. | |
| def relPath= new File( root.toURI().relativize( full.toURI() ).toString() ) |
| #!/bin/bash | |
| # This script is used by Nagios to post alerts into a Slack channel | |
| # using the Incoming WebHooks integration. Create the channel, botname | |
| # and integration first and then add this notification script in your | |
| # Nagios configuration. | |
| # | |
| # All variables that start with NAGIOS_ are provided by Nagios as | |
| # environment variables when an notification is generated. | |
| # A list of the env variables is available here: |
| import json | |
| import tornado.web | |
| class JsonHandler(BaseHandler): | |
| """Request handler where requests and responses speak JSON.""" | |
| def prepare(self): | |
| # Incorporate request JSON into arguments dictionary. | |
| if self.request.body: | |
| try: |
| import sys | |
| def j(lineno): | |
| frame = sys._getframe().f_back | |
| called_from = frame | |
| def hook(frame, event, arg): | |
| if event == 'line' and frame == called_from: | |
| try: | |
| frame.f_lineno = lineno |
| # -*- coding: utf-8 -*- | |
| import requests | |
| from io import BytesIO, SEEK_SET, SEEK_END | |
| class ResponseStream(object): | |
| def __init__(self, request_iterator): | |
| self._bytes = BytesIO() | |
| self._iterator = request_iterator |
| #!/bin/bash | |
| # | |
| # Watch current directory (recursively) for file changes, and execute | |
| # a command when a file or directory is created, modified or deleted. | |
| # | |
| # Written by: Senko Rasic <senko.rasic@dobarkod.hr> | |
| # | |
| # Requires Linux, bash and inotifywait (from inotify-tools package). | |
| # | |
| # To avoid executing the command multiple times when a sequence of |
This can reduce files to ~15% of their size (2.3M to 345K, in one case) with no obvious degradation of quality.
ghostscript -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
Other options for PDFSETTINGS:
Because I use Cloudflare to manage my domains and Backblaze for backups, it only made sense to take advantage of their Bandwidth Alliance for creating my own CDN. This has been incredibly helpful for image hosting for this knowledge base, however, I recently noticed that caching wasn't working as it should.
The overall problem started when I was adding a parking page for a domain I recently purchased. The background image was hosted on B2 and the image was supposed to be cached by Cloudflare. However, each time the page loaded, it would pull the image from the origin instead of the cache. I checked this on my knowledge base and found it was doing the same thing.