Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
linux_wiki:systemd_service_script [2016/01/31 00:47] billdozor [Implementation] |
linux_wiki:systemd_service_script [2018/03/23 14:52] billdozor |
||
---|---|---|---|
Line 6: | Line 6: | ||
**Checklist** | **Checklist** | ||
- | * Enterprise Linux 7 | + | * Distro(s): |
---- | ---- | ||
Line 23: | Line 23: | ||
* Copy to / | * Copy to / | ||
* Start your service< | * Start your service< | ||
+ | * **Note: This will fail if the ExecStart script/ | ||
---- | ---- | ||
Line 34: | Line 35: | ||
[Service] | [Service] | ||
+ | Type=simple | ||
EnvironmentFile=/ | EnvironmentFile=/ | ||
ExecStart=/ | ExecStart=/ | ||
Line 41: | Line 43: | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</ | </ | ||
- | * Description => Displays near the top of output on " | + | |
- | * After => can be any valid ".target" unit | + | |
- | * See all: systemctl -t target --all | + | * After => can be any valid systemd unit (.target, .service, etc) |
- | * EnvironmentFile => Configuration file to load | + | * **Multiple units are space separated** |
- | * ExecStart => Executable to start | + | * Another common use target is: After=network.target |
- | * Restart => Auto restarts the program if an un-handled exit error occurs | + | |
- | * WantedBy => If enabled, start under which target | + | |
+ | * Type => The process and daemon behavior | ||
+ | * simple -> default if Type is not set, but ExecStart is. Main process specified in ExecStart line. | ||
+ | * forking -> service forks a child process and the parent process exits | ||
+ | * oneshot -> default if Type and ExecStart are not set. Process is short lived, systemd will wait for the process to exit before continuting with other units. | ||
+ | * notify -> service will issue a notification when it has finished starting. Systemd will wait before processing other units | ||
+ | | ||
+ | * ExecStart => Executable to start | ||
+ | * Restart => Auto restarts the program if an un-handled exit error occurs | ||
+ | | ||
+ | | ||
+ | |||
+ | ---- | ||
===== Example: Test Script ===== | ===== Example: Test Script ===== | ||
Line 53: | Line 67: | ||
This is the script that was used to test the custom systemd service unit file. | This is the script that was used to test the custom systemd service unit file. | ||
+ | **NOTE:** The script being launched MUST have the "# | ||
+ | |||
+ | \\ | ||
/ | / | ||
<code bash> | <code bash> | ||
Line 65: | Line 82: | ||
done | done | ||
</ | </ | ||
+ | * **Note: Ensure this script is executable, or the service will fail to start.** | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Example: Service Status ==== | ||
+ | |||
+ | <code bash> | ||
+ | [root@server1 system]# systemctl start myprog.service | ||
+ | [root@server1 system]# systemctl status myprog.service | ||
+ | ● myprog.service - My Awesome Program | ||
+ | | ||
+ | | ||
+ | Main PID: 17602 (myprog.sh) | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Jan 24 10:30:08 server1.local systemd[1]: Started My Awesome Program. | ||
+ | Jan 24 10:30:08 server1.local systemd[1]: Starting My Awesome Program... | ||
+ | Jan 24 10:30:08 server1.local myprog.sh[17602]: | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Example: Logs ==== | ||
+ | |||
+ | <code bash> | ||
+ | journalctl -f | ||
+ | -- Logs begin at Fri 2015-12-25 22:36:05 CST. -- | ||
+ | Jan 24 10:30:08 server1.local systemd[1]: Starting My Awesome Program... | ||
+ | Jan 24 10:30:08 server1.local myprog.sh[17602]: | ||
+ | Jan 24 10:30:08 server1.local logger[17605]: | ||
+ | Jan 24 10:30:08 server1.local logger[17606]: | ||
+ | Jan 24 10:30:38 server1.local logger[17683]: | ||
+ | Jan 24 10:31:08 server1.local logger[17693]: | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Example: Docker Compose ===== | ||
+ | |||
+ | Putting docker-compose commands into a service. | ||
+ | |||
+ | / | ||
+ | <code bash> | ||
+ | [Unit] | ||
+ | Description=Docker Compose Containers | ||
+ | Requires=docker.service | ||
+ | After=docker.service | ||
+ | |||
+ | [Service] | ||
+ | Type=oneshot | ||
+ | RemainAfterExit=yes | ||
+ | ExecStart=/ | ||
+ | ExecStop=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====== Override File ====== | ||
+ | |||
+ | Override files are used when you want to modify part or all of a RPM/system provided systemd unit file. Use over rides instead of directly modifying system unit files, as they could be reverted upon next related package update. | ||
+ | |||
+ | System Provided unit files: / | ||
+ | |||
+ | ===== Override Example: docker service ===== | ||
+ | |||
+ | System provided file to over ride: / | ||
+ | |||
+ | * Create a directory to contain the over ride file (named after the original unit file name)< | ||
+ | * Create the over ride file< | ||
+ | |||
+ | [Service] | ||
+ | EnvironmentFile= | ||
+ | EnvironmentFile=-/ | ||
+ | ExecStart= | ||
+ | ExecStart=/ | ||
+ | * Each variable with a blank assignment (' | ||
+ | |||
+ | * Reload the systemd daemon for the override file to be picked up<code bash> | ||
+ | |||
+ | * Restart the service | ||
+ | |||
+ | ===== Override Example: rpcbind service ===== | ||
+ | |||
+ | System provided file to over ride: / | ||
+ | |||
+ | * Create a directory to contain the over ride file (named after the original unit file name, but add a " | ||
+ | * Create the over ride file (NAME.conf)< | ||
+ | |||
+ | [Service] | ||
+ | ExecStart= | ||
+ | ExecStart=/ | ||
+ | * Each variable with a blank assignment (' | ||
+ | |||
+ | * Reload the systemd daemon for the override file to be picked up<code bash> | ||
+ | |||
+ | * Restart the service | ||
+ | |||
+ | ---- | ||
+ |