I have this script in my home folder (pi): server.py.
How could I make Debian run this script at startup so I don't need to log in and run it manually?
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityAt the time that this answer was first written, Debian (as installed by default) used "SysV" rc scripts with the start-stop-daemon
binary. There was an example script, in the file /etc/init.d/skeleton
, that one could as a base for one's rc script. Once one had one's rc script and it was marked as executable, the update-rc.d
command could be used to add it to desired run levels.
As the years have gone by, things have changed. In 2014, in particular, two things changed:
/etc/init.d/skeleton
script was superseded by the example script in the init-d-script
(5) manual page, which later in 2018 became the only available base when /etc/init.d/skeleton
was done away with completely. The content of the skeleton also changed significantly, no longer needing people to write calls to start-stop-daemon
or indeed to write much more than some variable assignments. (See https://unix.stackexchange.com/a/480897/5132 .)systemctl enable
. There was no example unit file, though. (See https://github.com/systemd/systemd/issues/10572 .)So as of 2018 you need to write a systemd service unit file that (at the very least) names your script (using an absolute pathname) in an ExecStart
setting. You might be wanting, although the question does not specify one way or another, to use a User
setting to have the script run under the aegis of your user account and not the superuser's. And you might, again depending from things not specified in the question, need to coördinate the relative order of invoking your script and the (auto)mounting of your home directory if it is separately mounted.
/etc/init.d/skeleton
is not the way.
Put su -c 'SCRIPT' USER
into /etc/rc.local
.