<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.obsidianscheduler.com/doc/index.php?action=history&amp;feed=atom&amp;title=Linux_Service</id>
	<title>Linux Service - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.obsidianscheduler.com/doc/index.php?action=history&amp;feed=atom&amp;title=Linux_Service"/>
	<link rel="alternate" type="text/html" href="https://wiki.obsidianscheduler.com/doc/index.php?title=Linux_Service&amp;action=history"/>
	<updated>2026-10-29T22:49:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.10</generator>
	<entry>
		<id>https://wiki.obsidianscheduler.com/doc/index.php?title=Linux_Service&amp;diff=4178&amp;oldid=prev</id>
		<title>Craig: Wiki update</title>
		<link rel="alternate" type="text/html" href="https://wiki.obsidianscheduler.com/doc/index.php?title=Linux_Service&amp;diff=4178&amp;oldid=prev"/>
		<updated>2026-10-29T18:16:03Z</updated>

		<summary type="html">&lt;p&gt;Wiki update&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;As of Obsidian 7.1.0&amp;#039;&amp;#039;&amp;#039;, on Linux an Embedded Tomcat pack and/or Standalone Runtime can install systemd &amp;#039;&amp;#039;&amp;#039;templates&amp;#039;&amp;#039;&amp;#039; -- see [[Installation_Guide#Linux_desktop_and_systemd_integration|Linux desktop and systemd integration]] for the installer option and the manual &amp;#039;&amp;#039;&amp;#039;linux/install-embedded-linux-integration.sh&amp;#039;&amp;#039;&amp;#039; script. Installing those files does not enable or start anything.&lt;br /&gt;
&lt;br /&gt;
= Embedded Tomcat =&lt;br /&gt;
&lt;br /&gt;
 systemctl --user enable --now obsidian-embedded@scheduler.service&lt;br /&gt;
&lt;br /&gt;
For Standalone Admin embed installs:&lt;br /&gt;
&lt;br /&gt;
 systemctl --user enable --now obsidian-embedded@adminOnly.service&lt;br /&gt;
&lt;br /&gt;
The unit runs &amp;#039;&amp;#039;&amp;#039;webObsidian.sh run&amp;#039;&amp;#039;&amp;#039; with the instance name as the profile (&amp;#039;&amp;#039;&amp;#039;scheduler&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;adminOnly&amp;#039;&amp;#039;&amp;#039;) in the foreground (&amp;#039;&amp;#039;&amp;#039;Type=simple&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;TimeoutStopSec=180&amp;#039;&amp;#039;&amp;#039;). &amp;#039;&amp;#039;./webObsidian.sh stop&amp;#039;&amp;#039; also stops a service-started instance. Do &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; run &amp;#039;&amp;#039;./webObsidian.sh start scheduler&amp;#039;&amp;#039; by hand while the service is running.&lt;br /&gt;
&lt;br /&gt;
Default HTTP &amp;#039;&amp;#039;&amp;#039;8080&amp;#039;&amp;#039;&amp;#039; and stop port &amp;#039;&amp;#039;&amp;#039;9597&amp;#039;&amp;#039;&amp;#039;. Edit &amp;#039;&amp;#039;&amp;#039;webObsidian.sh&amp;#039;&amp;#039;&amp;#039; before enabling the service.&lt;br /&gt;
&lt;br /&gt;
This embed unit is a &amp;#039;&amp;#039;&amp;#039;user&amp;#039;&amp;#039;&amp;#039; service. See [[#Running_without_an_active_login_session|Running without an active login session]] below.&lt;br /&gt;
&lt;br /&gt;
= Standalone Runtime =&lt;br /&gt;
&lt;br /&gt;
The standalone template is &amp;#039;&amp;#039;&amp;#039;obsidian-standalone@&amp;#039;&amp;#039;&amp;#039;. Instances:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@prod&amp;#039;&amp;#039;&amp;#039; (or any name other than &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; / &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;) runs &amp;#039;&amp;#039;&amp;#039;standaloneObsidian.sh&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@1&amp;#039;&amp;#039;&amp;#039; runs &amp;#039;&amp;#039;&amp;#039;1standaloneObsidian.sh&amp;#039;&amp;#039;&amp;#039; when that script is present&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;@2&amp;#039;&amp;#039;&amp;#039; runs &amp;#039;&amp;#039;&amp;#039;2standaloneObsidian.sh&amp;#039;&amp;#039;&amp;#039; when that script is present&lt;br /&gt;
&lt;br /&gt;
User-level:&lt;br /&gt;
&lt;br /&gt;
 systemctl --user enable --now obsidian-standalone@prod.service&lt;br /&gt;
&lt;br /&gt;
After a root / sudo install:&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable --now obsidian-standalone@prod.service&lt;br /&gt;
&lt;br /&gt;
The system template runs &amp;#039;&amp;#039;&amp;#039;/etc/obsidian/standalone-instance.sh&amp;#039;&amp;#039;&amp;#039; and looks up the install directory for that instance in &amp;#039;&amp;#039;&amp;#039;/etc/obsidian/standalone-instances&amp;#039;&amp;#039;&amp;#039; so more than one install can share the same template. A user-level unit instead runs &amp;#039;&amp;#039;&amp;#039;linux/standalone-instance.sh&amp;#039;&amp;#039;&amp;#039; from that install directory.&lt;br /&gt;
&lt;br /&gt;
Either path stays in the foreground (&amp;#039;&amp;#039;&amp;#039;Type=simple&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;TimeoutStopSec=180&amp;#039;&amp;#039;&amp;#039; unless the headless &amp;#039;&amp;#039;&amp;#039;embed.linux.standalone.timeoutStopSec&amp;#039;&amp;#039;&amp;#039; override is set) and calls &amp;#039;&amp;#039;&amp;#039;standaloneObsidian.sh run&amp;#039;&amp;#039;&amp;#039; (no background &amp;#039;&amp;#039;&amp;#039;&amp;amp;&amp;#039;&amp;#039;&amp;#039;). Stock standalone listen port is &amp;#039;&amp;#039;&amp;#039;10451&amp;#039;&amp;#039;&amp;#039; unless you change the launcher script. Stop with &amp;#039;&amp;#039;&amp;#039;systemctl stop&amp;#039;&amp;#039;&amp;#039; on the instance (see [[#Stop_and_logs|Stop and logs]]).&lt;br /&gt;
&lt;br /&gt;
= Stop and logs =&lt;br /&gt;
&lt;br /&gt;
Prefer &amp;#039;&amp;#039;&amp;#039;systemctl stop&amp;#039;&amp;#039;&amp;#039; on the instance. That runs the wrapper (&amp;#039;&amp;#039;&amp;#039;linux/standalone-instance.sh stop&amp;#039;&amp;#039;&amp;#039; or, for a system unit, &amp;#039;&amp;#039;&amp;#039;/etc/obsidian/standalone-instance.sh stop&amp;#039;&amp;#039;&amp;#039;), which writes &amp;#039;&amp;#039;linux/log4j2-%i.xml&amp;#039;&amp;#039; with literal log paths and sets &amp;#039;&amp;#039;&amp;#039;log4j.configurationFile&amp;#039;&amp;#039;&amp;#039; before the launcher &amp;#039;&amp;#039;&amp;#039;stop&amp;#039;&amp;#039;&amp;#039;. &amp;#039;&amp;#039;&amp;#039;As of Obsidian 7.1.0&amp;#039;&amp;#039;&amp;#039;, when &amp;#039;&amp;#039;&amp;#039;log.path&amp;#039;&amp;#039;&amp;#039; is outside the install directory the default standalone file is &amp;#039;&amp;#039;$INSTALL_PATH/logs/obsidian-standalone.log&amp;#039;&amp;#039;. Additional instances use &amp;#039;&amp;#039;obsidian-standalone-%i.log&amp;#039;&amp;#039; under that same &amp;#039;&amp;#039;&amp;#039;logs/&amp;#039;&amp;#039;&amp;#039; directory.&lt;br /&gt;
&lt;br /&gt;
Do &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; call &amp;#039;&amp;#039;&amp;#039;./standaloneObsidian.sh start&amp;#039;&amp;#039;&amp;#039; (or the numbered &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; scripts) while the service is running. Do &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; stop with a launcher that never sets &amp;#039;&amp;#039;&amp;#039;log4j.configurationFile&amp;#039;&amp;#039;&amp;#039; -- Log4j then follows the classpath &amp;#039;&amp;#039;&amp;#039;log4j2.xml&amp;#039;&amp;#039;&amp;#039; and can open the Tomcat web log (permission denied as the scheduler user). Journal lines &amp;#039;&amp;#039;&amp;#039;Null object returned for RollingFile&amp;#039;&amp;#039;&amp;#039; or missing appender &amp;#039;&amp;#039;&amp;#039;fileLogger&amp;#039;&amp;#039;&amp;#039; mean the instance XML was not applied; leave the unit up if it is &amp;#039;&amp;#039;&amp;#039;active&amp;#039;&amp;#039;&amp;#039; and copy a current &amp;#039;&amp;#039;&amp;#039;standalone-instance.sh&amp;#039;&amp;#039;&amp;#039; plus &amp;#039;&amp;#039;&amp;#039;log4j2-standalone.xml.template&amp;#039;&amp;#039;&amp;#039; into &amp;#039;&amp;#039;&amp;#039;linux/&amp;#039;&amp;#039;&amp;#039; (and &amp;#039;&amp;#039;&amp;#039;/etc/obsidian/&amp;#039;&amp;#039;&amp;#039; for a system unit), then &amp;#039;&amp;#039;&amp;#039;systemctl restart&amp;#039;&amp;#039;&amp;#039; that instance.&lt;br /&gt;
&lt;br /&gt;
= Replacing a previous systemd unit =&lt;br /&gt;
&lt;br /&gt;
If you already run standalone under your own unit (especially &amp;#039;&amp;#039;&amp;#039;Restart=always&amp;#039;&amp;#039;&amp;#039;), &amp;#039;&amp;#039;&amp;#039;stop&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;disable&amp;#039;&amp;#039;&amp;#039; that unit before enabling &amp;#039;&amp;#039;&amp;#039;obsidian-standalone@&amp;#039;&amp;#039;&amp;#039;. Otherwise the old unit respawns the JVM on the same port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;systemctl mask&amp;#039;&amp;#039;&amp;#039; only works when systemd can replace the unit path with a symlink to &amp;#039;&amp;#039;/dev/null&amp;#039;&amp;#039;. If a real unit file already lives at that path, mask fails with &amp;#039;&amp;#039;&amp;#039;File exists&amp;#039;&amp;#039;&amp;#039;. &amp;#039;&amp;#039;&amp;#039;disable&amp;#039;&amp;#039;&amp;#039; the unit, move or remove the file, then &amp;#039;&amp;#039;&amp;#039;daemon-reload&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
= Running without an active login session =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;systemctl --user&amp;#039;&amp;#039;&amp;#039; units (a GUI install, or a non-root enable) stop at logout and do not start at boot until lingering is on:&lt;br /&gt;
&lt;br /&gt;
 loginctl enable-linger &amp;lt;nowiki&amp;gt;&amp;lt;username&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A standalone template installed as root (typical headless sudo) is a &amp;#039;&amp;#039;&amp;#039;system&amp;#039;&amp;#039;&amp;#039; unit. It does not need linger. Use &amp;#039;&amp;#039;&amp;#039;sudo systemctl&amp;#039;&amp;#039;&amp;#039; (no &amp;#039;&amp;#039;&amp;#039;--user&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
= Removing the integration =&lt;br /&gt;
&lt;br /&gt;
 systemctl --user disable --now obsidian-embedded@scheduler.service&lt;br /&gt;
 systemctl --user disable --now obsidian-standalone@prod.service&lt;br /&gt;
 rm ~/.config/systemd/user/obsidian-embedded@.service&lt;br /&gt;
 rm ~/.config/systemd/user/obsidian-standalone@.service&lt;br /&gt;
 rm ~/.local/share/applications/obsidian-embedded.desktop&lt;br /&gt;
 systemctl --user daemon-reload&lt;br /&gt;
&lt;br /&gt;
For a system standalone template (root / sudo install):&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl disable --now obsidian-standalone@prod.service&lt;br /&gt;
 sudo rm /etc/systemd/system/obsidian-standalone@.service&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
The same details ship as &amp;#039;&amp;#039;&amp;#039;linux/README-linux-integration.md&amp;#039;&amp;#039;&amp;#039; in your install directory.&lt;/div&gt;</summary>
		<author><name>Craig</name></author>
	</entry>
</feed>