Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux_wiki:systemd_service_script [2016/01/31 22:37] billdozor [Implementation] |
linux_wiki:systemd_service_script [2019/05/25 23:50] (current) |
||
---|---|---|---|
Line 6: | Line 6: | ||
**Checklist** | **Checklist** | ||
- | * Enterprise Linux 7 | + | * Distro(s): |
---- | ---- | ||
Line 35: | Line 35: | ||
[Service] | [Service] | ||
+ | Type=simple | ||
EnvironmentFile=/ | EnvironmentFile=/ | ||
ExecStart=/ | ExecStart=/ | ||
Line 42: | 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 | ||
+ | | ||
+ | | ||
---- | ---- | ||
Line 56: | 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 104: | Line 118: | ||
Jan 24 10:31:08 server1.local logger[17693]: | 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 | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Example: Apache HTTPD Compiled ===== | ||
+ | |||
+ | Creating a service unit file for a locally compiled and installed Apache web server. | ||
+ | |||
+ | \\ | ||
+ | / | ||
+ | <code bash> | ||
+ | [Unit] | ||
+ | Description=Apache Web Server | ||
+ | After=network.target remote-fs.target nss-lookup.target | ||
+ | |||
+ | [Service] | ||
+ | Type=forking | ||
+ | PIDFile=/ | ||
+ | ExecStart=/ | ||
+ | ExecStop=/ | ||
+ | ExecReload=/ | ||
+ | PrivateTmp=true | ||
+ | LimitNOFILE=infinity | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | Reload systemd< | ||
+ | |||
+ | \\ | ||
+ | Enable/ | ||
+ | systemctl start httpd-local</ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====== 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 | ||
---- | ---- | ||