I have a two part question.
What is the significance of the @ symbol in systemctl scripts?
How to start vsftpd in fedora 16, (which in some tutorials seems to contain an @ in it's name)? I have done everything the tutorials say,
and it still gives me an error.
http://blog.tuxforge.com/fedora-16-vsftpd/
What I've done
systemctl enable vsftpd@.service
What I see
Failed to issue method call: No such file or directory
(I have tried this with a absolute path as well, and after I checked there is no such file. The real file does not contain an @ sign, and is located under the /lib/systemd/system/ directory. I have also tried starting and enabling with and without the @ symbol, enabling works, but starting doesn't. I realize the article is now obsolete, but I still cannot seem to start the service. When I try to connect it doesn't let me)
EDIT: I got the service to start somehow, but I would still like to know what the @ symbol means in some service names. Also I am still getting a login error number #500 cannot change directory […], what does this mean?
To start it I just typed
sudo systemctl enable vsftpd.service
sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)
Best Answer
The
@
symbol is for special services, sockets, and other units where multiple instances can be run.For instance,
getty@.service
is the service that provides text login terminals. When you press Ctrl+Alt+F2,getty@tty2.service
is started, creating virtual terminal #2.Another service that uses this functionality is OpenVPN. You can create a file
/etc/openvpn/work.conf
, configured to connect to the VPN at your workplace, and thensystemctl start openvpn@work.service
to connect to it. Similarly, you could create/etc/openvpn/home.conf
, then startopenvpn@home.service
if you had a VPN at home. This prevents you from having to create a.service
file for every VPN you connect to.But don't take my word for it. Try it out! Let's create a simple service that outputs a message to syslog. Create a file
/etc/systemd/system/echo@.service
with the following contents:Notice the
%i
? systemd will populate that with whatever follows the@
sign when the service is started. So, try startingecho@foo.service
:Then, check the journal:
At the bottom, you'll see that systemd ran
/bin/echo foo
:Now, try
systemctl start echo@bar.service
. This time, systemd will populate%i
withbar
, so you'll see:That's all there is to it! Anything could potentially follow the
@
sign, as systemd just replaces%i
in the service definition with it. OpenVPN uses it for configuration, other services might use for something else, like a port number.For more information, see
man systemd.unit
.