diff --git a/src/service/__init__.py b/src/service/__init__.py
index <HASH>..<HASH> 100644
--- a/src/service/__init__.py
+++ b/src/service/__init__.py
@@ -212,6 +212,17 @@ class Service(object):
         if pid:
             raise ValueError('Daemon is already running at PID %d.' % pid)
 
+        # The default is to place the PID file into ``/var/run``. This
+        # requires root privileges. Since not having these is a common
+        # problem we check a priori whether we can create the lock file.
+        try:
+            self.pid_file.acquire(timeout=0)
+        finally:
+            try:
+                self.pid_file.release()
+            except lockfile.NotLocked:
+                pass
+
         if _detach_process():
             # Calling process returns
             return
diff --git a/test/test_service.py b/test/test_service.py
index <HASH>..<HASH> 100644
--- a/test/test_service.py
+++ b/test/test_service.py
@@ -27,6 +27,7 @@ Tests for the ``service`` module.
 import threading
 import time
 
+import lockfile
 from nose.tools import ok_ as ok, raises
 import psutil
 
@@ -202,3 +203,11 @@ class TestService(object):
         ok(not service.is_running())
         start(service)
         ok(service.is_running())
+
+    @raises(lockfile.LockFailed)
+    def test_no_lock_permissions(self):
+        """
+        Test starting a service without necessary permissions.
+        """
+        Service(_NAME).start()
+
Added explicit check for lock file permissions.