# cyr_withlock_run

is used to run system command with a lock held

Warning

This command runs as the Cyrus user, so if you need to call something as root, the cyrus user may need sudo privileges.

## Synopsis

    cyr_withlock_run [ -C config-file ] [ -u userid ] cmd args...

## Description

cyr_withlock_run will run the command and arguments provided on the command line, either locking the entire server, or a particular user, so no changes can be made to it while this command is running.

WARNING: since this takes an exclusive lock, it will deadlock if the command tries to connect to Cyrus via IMAP/JMAP/etc and run commands that take exclusive locks. You can run cyrus commandline tools so long as the environment is passed through.

It is most useful for running an external filesystem snapshot command, which can be run safely, knowing that files aren't in a partial state.

cyr_withlock_run reads its configuration options out of the imapd.conf(5) file unless specified otherwise by -C.

## Options

-C config-file

  Use the specified configuration file config-file rather than the default imapd.conf(5).

-u, --user <userid>

  Lock just the specified userid rather than the global lock.

  NOTE: if you run for the global lock, then your server must have the global_lock config option set, or this command will fail with an error as it can't get a guaranteed lock.

## Examples

    cyr_withlock_run sleep 300

> Pause all writes on the server for 300 seconds (stops any writes from getting locks)

## Files

/etc/imapd.conf

## Environment

Sets the CYRUS_HAVELOCK_GLOBAL or CYRUS_HAVELOCK_USER environment variables, to tell any called cyrus command that this lock is already held.

## See Also

imapd.conf(5)