Add systemd services for auto-start
This commit is contained in:
@@ -0,0 +1,154 @@
|
|||||||
|
# Auto-Start Obsidian with Systemd
|
||||||
|
|
||||||
|
Ensures Obsidian starts automatically on boot and stays running.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### 1. Install Required Packages
|
||||||
|
```bash
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y xvfb xvfb-run
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Copy Service Files
|
||||||
|
```bash
|
||||||
|
sudo cp /workspace/second-brain/obsidian.service /etc/systemd/system/
|
||||||
|
sudo cp /workspace/second-brain/obsidian-mcp.service /etc/systemd/system/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Reload Systemd
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Enable Services
|
||||||
|
```bash
|
||||||
|
# Enable Obsidian to start on boot
|
||||||
|
sudo systemctl enable obsidian.service
|
||||||
|
|
||||||
|
# Enable MCP server (optional, but recommended)
|
||||||
|
sudo systemctl enable obsidian-mcp.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Start Services
|
||||||
|
```bash
|
||||||
|
# Start both services
|
||||||
|
sudo systemctl start obsidian.service
|
||||||
|
sudo systemctl start obsidian-mcp.service
|
||||||
|
|
||||||
|
# Check status
|
||||||
|
sudo systemctl status obsidian.service
|
||||||
|
sudo systemctl status obsidian-mcp.service
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Managing Services
|
||||||
|
|
||||||
|
### View Logs
|
||||||
|
```bash
|
||||||
|
# Real-time Obsidian logs
|
||||||
|
sudo journalctl -fu obsidian.service
|
||||||
|
|
||||||
|
# Real-time MCP server logs
|
||||||
|
sudo journalctl -fu obsidian-mcp.service
|
||||||
|
|
||||||
|
# Last 50 lines
|
||||||
|
sudo journalctl -n 50 -u obsidian.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Stop/Restart
|
||||||
|
```bash
|
||||||
|
sudo systemctl stop obsidian.service
|
||||||
|
sudo systemctl restart obsidian.service
|
||||||
|
sudo systemctl restart obsidian-mcp.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check Auto-Start
|
||||||
|
```bash
|
||||||
|
# List enabled services
|
||||||
|
systemctl list-unit-files | grep obsidian
|
||||||
|
|
||||||
|
# Should show "enabled" for both
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Service Configuration
|
||||||
|
|
||||||
|
### obsidian.service
|
||||||
|
- **Type:** simple
|
||||||
|
- **User:** intense
|
||||||
|
- **Display:** Virtual Xvfb (:99)
|
||||||
|
- **Restart:** Always (if crashes, restarts in 15s)
|
||||||
|
- **Memory Limit:** 2GB
|
||||||
|
- **CPU Quota:** 80%
|
||||||
|
|
||||||
|
### obsidian-mcp.service
|
||||||
|
- **Depends on:** obsidian.service
|
||||||
|
- **Type:** simple
|
||||||
|
- **Restart:** Always
|
||||||
|
- **Memory Limit:** 512MB
|
||||||
|
- **Health Check:** Verifies API is reachable on startup
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Obsidian won't start
|
||||||
|
```bash
|
||||||
|
sudo journalctl -u obsidian.service -n 50 --no-pager
|
||||||
|
```
|
||||||
|
|
||||||
|
### MCP server failing
|
||||||
|
```bash
|
||||||
|
# Make sure .env has valid API key
|
||||||
|
cat /workspace/second-brain/.env | grep OBSIDIAN_API_KEY
|
||||||
|
```
|
||||||
|
|
||||||
|
### Can't connect to Obsidian
|
||||||
|
```bash
|
||||||
|
# Check if Obsidian is running
|
||||||
|
ps aux | grep obsidian
|
||||||
|
|
||||||
|
# Check virtual display
|
||||||
|
ps aux | grep Xvfb
|
||||||
|
|
||||||
|
# Manual test
|
||||||
|
DISPLAY=:99 xdpyinfo
|
||||||
|
```
|
||||||
|
|
||||||
|
### Port already in use
|
||||||
|
```bash
|
||||||
|
# Check who's using port 27123
|
||||||
|
sudo lsof -i :27123
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternative: Supervisor
|
||||||
|
|
||||||
|
If systemd doesn't work, use supervisord:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install supervisor
|
||||||
|
|
||||||
|
cat > /etc/supervisor/conf.d/obsidian.conf << 'EOF'
|
||||||
|
[program:obsidian]
|
||||||
|
command=/home/intense/.local/bin/obsidian --no-sandbox
|
||||||
|
user=intense
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
redirect_stderr=true
|
||||||
|
stdout_logfile=/var/log/obsidian.log
|
||||||
|
environment=DISPLAY=:99
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sudo supervisorctl reread
|
||||||
|
sudo supervisorctl update
|
||||||
|
sudo supervisorctl start obsidian
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Created: 2026-04-26
|
||||||
Executable
+46
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Install Obsidian and MCP systemd services
|
||||||
|
# Run with sudo: sudo bash install-systemd.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "📦 Installing Obsidian systemd services..."
|
||||||
|
|
||||||
|
# Check if running as root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "❌ This script must be run with sudo"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
echo "Installing dependencies..."
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -y -qq xvfb xvfb-run
|
||||||
|
|
||||||
|
# Copy service files
|
||||||
|
echo "Installing systemd services..."
|
||||||
|
cp obsidian.service /etc/systemd/system/obsidian.service
|
||||||
|
cp obsidian-mcp.service /etc/systemd/system/obsidian-mcp.service
|
||||||
|
|
||||||
|
# Fix permissions
|
||||||
|
chmod 644 /etc/systemd/system/obsidian.service
|
||||||
|
chmod 644 /etc/systemd/system/obsidian-mcp.service
|
||||||
|
|
||||||
|
# Reload systemd
|
||||||
|
echo "Reloading systemd..."
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
# Enable services
|
||||||
|
echo "Enabling services..."
|
||||||
|
systemctl enable obsidian.service
|
||||||
|
systemctl enable obsidian-mcp.service
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Systemd services installed!"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo "1. Configure .env with your Obsidian API key"
|
||||||
|
echo "2. Start services: sudo systemctl start obsidian.service"
|
||||||
|
echo "3. View logs: sudo journalctl -fu obsidian.service"
|
||||||
|
echo ""
|
||||||
|
echo "For more info, see SYSTEMD-SETUP.md"
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Obsidian MCP Server
|
||||||
|
After=obsidian.service network.target
|
||||||
|
Documentation=https://github.com/cyanheads/obsidian-mcp-server
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=intense
|
||||||
|
WorkingDirectory=/workspace/second-brain
|
||||||
|
|
||||||
|
# Load environment
|
||||||
|
EnvironmentFile=/workspace/second-brain/.env
|
||||||
|
|
||||||
|
# Start MCP server
|
||||||
|
ExecStart=/usr/bin/npx obsidian-mcp-server
|
||||||
|
|
||||||
|
# Health check - restart if API is unavailable
|
||||||
|
ExecStartPost=/usr/bin/sh -c 'sleep 5 && curl -s -f -H "Authorization: Bearer ${OBSIDIAN_API_KEY}" http://127.0.0.1:27123/ || exit 1'
|
||||||
|
|
||||||
|
# Restart policy
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
StartLimitInterval=300
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
|
# Resource limits
|
||||||
|
MemoryLimit=512M
|
||||||
|
CPUQuota=50%
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
SyslogIdentifier=obsidian-mcp
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Obsidian Vault Server with MCP
|
||||||
|
After=network.target
|
||||||
|
Documentation=file:///workspace/second-brain/SETUP.md
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=intense
|
||||||
|
Home=/home/intense
|
||||||
|
WorkingDirectory=/workspace/second-brain
|
||||||
|
|
||||||
|
# For headless: use Xvfb virtual display
|
||||||
|
Environment="DISPLAY=:99"
|
||||||
|
|
||||||
|
# Start Xvfb first, then Obsidian
|
||||||
|
ExecStartPre=/usr/bin/sh -c "Xvfb :99 -screen 0 1024x768x24 &"
|
||||||
|
ExecStart=/home/intense/.local/bin/obsidian --no-sandbox
|
||||||
|
|
||||||
|
# Restart policy
|
||||||
|
Restart=always
|
||||||
|
RestartSec=15
|
||||||
|
StartLimitInterval=300
|
||||||
|
StartLimitBurst=3
|
||||||
|
|
||||||
|
# Resource limits
|
||||||
|
MemoryLimit=2G
|
||||||
|
CPUQuota=80%
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
SyslogIdentifier=obsidian
|
||||||
|
|
||||||
|
# Stop timeout
|
||||||
|
TimeoutStopSec=30
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
Reference in New Issue
Block a user