My main reference for this article is the Plesk Command Line Reference (Linux) direct from the Parallels Plesk Documentation Page. Much thanks to the folks at Media Temple for passing on these links!

Before diving in, make sure you have your affairs in order:

If this sounds like you, keep reading. Now some bullets about the author:

My Setup:

  • Media Temple (dv) Dedicated-Virtual 4.0
  • Parallels Plesk Panel v10.4.4_build1013111102.18
  • CentOS 5 on Linux 2.6.18-028stab099.3
  • SSH, iTerm.app on OSX
  • A big comfy arm chair in a quiet room.

If you are using a different version of Plesk, the official documentation should have extensive notes about the difference between versions. I imagine much of it is about the same though, if you’re anywhere near version 10.4.

For Windows users, the commands should be the same so long as you are piped in via SSH using a Unix Bash emulator of some sort. I hear the names Cygwin and PuTTY quite often….

Getting Started

Enough with the formalities. Let’s bash it up.

All Plesk utilities are located in the psa directory on your machine. For me, that’s

/usr/local/psa/bin/<UTILITY>

To get a quick snapshot of what’s available, take a peek at the directory contents.

ls /usr/local/psa/bin/

To execute any command, simply navigate to it and enter the instructions. It looks something like this:

/usr/local/psa/bin/<UTILITY> --<COMMAND> -<OPTION1> <PARAM> -<COMMAND2> <PARAM>

For all the utilities I’ve bothered to investigate, these are the most common commands.

--create
--add
--update
--info
--help
--delete
--remove

These functions have corresponding short forms for those of you with lazy fingers and/or tiny screens:

-c    # same as --create
-a    # same as --add
-u    # same as --update
-i    # same as --info
-h    # same as --help
-d    # same as --delete
-r    # same as --remove

So if you’re into the whole brevity thing, just cd into /usr/local/psa/bin/ and start with ./ followed by the utility name, then the short form of the command, and enter your instructions. Here’s what it looks like:

cd /usr/local/psa/bin/
./UtilityName -x -<OPTION1> <PARAM> -<COMMAND2> <PARAM>

It would be great if there was a consistent convention for --create vs --add and --delete vs --remove, so be sure to scope the Using Command Line Utilities section of the Parallels documentation and figure out exactly what command goes with a given utility. Looking at the big picture, though, I’m just stoked break away from using a browser-based GUI for trivial server admin tasks. There are also plenty of utility-specific commands, so if you’re unsure or feel like something’s missing, you know where to look.

Examples

We have arrived at the moment of truth. This is the part of the article where, in exchange for your hard work and dedication, you are rewarded with some plug & play examples to start things off nice and proper. I’ll assume you’ve cd-ed into the appropriate directory by now. Let’s go:

Admin Info

We’ll start off nice and easy. Type this to get info about the admin (you).

./admin --info

Hey look, it’s like your Facebook profile, minus that embarrassing photo you were tagged in at that party. Neat!

PHP Settings

Ok, now another easy one to get warmed up. To view PHP settings for a certain domain, type:

./site --show-php-settings example.com

Zzzzzzz … OK, moving on….

Managing Email Accounts

Here’s a hot topic: email boxes. Let’s make one:

./mail --create [email protected] -passwd 'user pass' -mbox_quota -1 -mailbox true

This creates the account [email protected] with password ‘user pass’ and sets the mailbox quota to whatever is the default. There is a “gotcha” with the create function: don’t forget to enter -mailbox true or the account won’t be functional!

Now let’s say we want to change the password on the box we just created to something more secure…

./mail --update [email protected] -passwd 'som3thingm0res3cure'

Or change the email address to John’s full name…

./mail --rename [email protected] -new JohnDoe

Just in case of any confusion, let’s cover our bases with some aliases!

./mail --update [email protected] -aliases add:JohnathanDoe,JDoe,JDizzle

Logging in to webmail and setting up imap can be a pain, so let’s forward John’s email to his gmail account.

./mail --update [email protected] -forwarding true -forwarding-addresses add:[email protected]

If John is on vacation, just set up an auto-responder with the autoresponder utility.

./autoresponder --update bbvacation -mail [email protected] -subject "I'm in Bora Bora!" ```-text "I won't be checking email until January 1. For urgent matters, please call at 555-555-5555 and leave a message." -status true

When John gets back, update the -status parameter to turn off the “bbvacation” auto-responder.

./autoresponder --update bbvacation -mail [email protected] -status false

FTP Users

Another must-have. To make an additional FTP account, use the ftpsubaccount utility like so:

./ftpsubaccount --create JohnDoe -passwd 'userpass' -domain example.com

Now user JohnDoe can login via FTP and access the main site directory for example.com (but nothing higher up or adjacent). To lock the JDow down to a specific directory within, run --update and pass the -home option and a directory path relative to the site root (not your server root):

./ftpsubaccount --update JohnDoe -home directory/path/here

Databases

Here’s one of my personal favorites. When I need to create a database, that usually means I’m building out a new CMS-based site, and don’t want to be distracted. Stopping everything to open Plesk, log in, navigate to the “Database” section, and fill out the forms required to create the a db and add users is not conducive to development eudæmonia. Plus there’s just something stereotypically satisfying about creating a database from a command prompt. Let’s make a MySQL database called “example_db” on example.com and print its ID upon completion.

./database --create example_db -type mysql -domain example.com -print-id

Warning: Make sure the -domain is a primary domain for one of your subscriptions. You can’t use just any domain from your account.

Now, what good is a database without a user? Let’s give JDoe access.

./database --update example_db -add_user JDoe -passwd samplepass

And don’t forget Jane, the out-of-office developer on 219.11.43.178.

./database --update example_db -add_user Jane -passwd samplepass
./database --update example_db -update_user Jane -passwd samplepass -add-access 219.11.43.178

Uh-oh - Jane went rogue. Let’s revoke that remote access ASAP, then remove her user account.

./database --update example_db -update_user Jane -passwd samplepass -remove-access 192.0.2.78
./database --update example_db -remove_user Jane

Subscriptions, Users, & Sites

In Plesk, “subscription” refers to and individual “power panel” (admin panel, control panel, et al) that is granted only enough access to administer certain domains and related tasks. Subscriptions come with a separate user and login credentials, and are owned by another user (usually you, the main server admin).

For a benevolent serving of data on Plesk subscriptions, check out this Media Temple Knowledge Base article.

To start a new subscription based on the domain example.com with the service plan “Unlimited” with a login of “subadmin_name”, run this command:

./subscription --create example.com -owner admin -service-plan "Unlimited" -ip 216.70.84.196 -login subadmin_name -passwd 'userpass'

To add another domain to the example.com subscription, use the site utility.

./site --create anotherdomain.com -webspace-name example.com -hosting true

To add example.net with the “standard forwarding” hosting type, redirecting all traffic to example.com, pass the -hst_type option when you create the site.

./site --create example.net -webspace-name example.com -hosting true -hst_type std -target_url example.com

To create a user account for webmaster Mary, who will manage websites of JDoe:

./user --create [email protected] -owner JDoe -passwd sample -cname Mary -role webmaster

Other Utilities

With your newfound expertise in Linux server administration, I’ll leave you with some other choice utilities to get the administrative juices flowing.

Subdomains

/usr/local/psa/bin/subdomain

Add Subdomain

--create NAME -domain example.com -hard_quota 1G -ssi true -php true -ssl true -cgi true -fastcgi true -perl true -asp true -python true -coldfusion true

Update Subdomain

--update NAME -domain example.com -hard_quota 1G -ssi true -php true -ssl true -cgi true -fastcgi true -perl true -asp true -python true -coldfusion true

Rename Subdomain

--update NAME -domain example.com -new_name forum

Remove Subdomain(s)

--remove -subdomains NAME1,NAME2 -domain example.com

Domain Aliases

This nifty little utility allows you redirect both web and mail service from the alias domain to the hosted domain.

./domalias --create examplealias.net -domain example.com -status enabled -mail true

With this configuration, any visitors to examplealias.net will be redirected to example.com, and any mail sent to [email protected] will be forwarded to [email protected], if it exists on the hosted domain.

Directory Protection

Here’s another utility that seems made for the command line. Need to protect a directory real quick? Use the protdir utility.

./protdir --create Protected_Dir -domain example.com -add_user JDoe -passwd userpass -type cgi

Use a -type parameter of ‘nonssl’, or ‘ssl’ for site-level security, or a use ‘cgi’ for root-level security.

There are also a bunch of utilities I haven’t listed, including a lot related to the business/reselling tools included in Plesk. If that’s your alley, be sure to read through the Using Command Line Utilities section of the Plesk CLI docs and see what you can do.