Ubuntu: How To Start Program As Service

According to Ubuntu’s Upstart website, “Upstart is an event-based replacement for the /sbin/init daemon which handles starting of tasks and services during boot, stopping them during shutdown and supervising them while the system is running.” Basically, Upstart is an init daemon that replaces the /etc/init.d scripts. It comes with Ubuntu 6.10 and later, and it is also used in Fedora and Debian.
If you want to run your program with Upstart, you have to write a job for it. Jobs are defined in files placed in /etc/init with the .conf extension. The job will be named after the file it is defined in (without the .conf extension). The job definitions are written in plain text files (should not be executable).
/etc/init/greeenlog.conf
description "Logs keypresses, screenshots, clipboard data, and browsing history to a database." # Start when gnome starts start on started gdm stop on shutdown # Set any Environmental variables you need env DISPLAY=:0.0 exec /usr/local/greeenlog/main.pyw
After saving this job, you can go ahead and run it. No reboot is necessary. Here are the commands (assuming you have a job named greeenlog):
$ status greeenlog
greeenlog stop/waiting
status returns the last action performed on the job (start or stop) followed by the current state (running, sleeping, waiting, etc.) and the process ID (if any).
$ start greeenlog
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.61" (uid=1000 pid=2496 comm="start) interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply=0 destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init"))
The start command tells Upstart to start the job, but what was that garbage I got for a response? Well, after getting some help, I realized that all I needed to do was add sudo:
$ sudo start greeenlog
greeenlog start/running, process 2943
You can also stop the service with the stop command.
I used the job defined above to run my personal keylogger as a service. However, It often would fail to start properly at boot. Running the service manually later with sudo start greeenlog would start the keylogger correctly, but what kind of shitty keylogger needs to be started manually? After two days of tinkering, I’ve learned that Upstart is not the right answer for startup applications that depend on GNOME or X, even if they do require root access. If want to run an application at boot that requires root access, you should try Run Application as Root at Startup instead.
You might notice that I defined an environment variable in my Upstart job. Upstart only provides baseline environment variables. Here are the variables that were provided to my job by default, captured in a Python dictionary with os.environ:
{'TERM': 'linux', 'PWD': '/', 'UPSTART_INSTANCE': '', 'UPSTART_JOB': 'greeenlog', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin'}
Related Posts
- How to install Letsencrypt certificates with certbot in ubuntu 16.04
- A Guide to Moving IT Services During an Office Relocation
- How to Set up a Fully Functional Mail Server on Ubuntu 16.04 with iRedMail
- GIMP 2.10 released: Features 32-bit support, new UI and A Ton Of Improvements
- Setting Up SFTP on Ubuntu 16.04
- Install Java in Ubuntu 16.04
- ArangoDB, install and configure the popular Database in ubuntu 16.04
- How to Choose a Laptop for Web Design and Development
- The Best Lightweight Linux Distributions For Older PC's
- How to write real client IP address in error Log with Varnish 4 and Apache 2.4 in Ubuntu 16.04
- How to Configure the Mod_Security Core Ruleset in Ubuntu
- Install Shotcut Video Editor in Ubuntu 16.04, 16.10