Pause/disable recurring job

You can simply use a condition inside a recurring job and store it in your database to prevent job running:

public void MyMethod()
{
    if (someCondition) { return; }

    /* ... */
}

Or use filters to extend Hangfire as shown below (I haven’t tested the code):

public class CanBePausedAttribute : JobFilterAttribute, IServerFilter
{
    public void OnPerforming(PerformingContext filterContext)
    {
        var values = filterContext.Connection.GetAllItemsFromSet("paused-jobs");
        if (values.Contains(filterContext.Job.Type.Name))
        {
            filterContext.Canceled = true;
        }
    }

    public void OnPerformed(PerformedContext filterContext)
    {
    }
}

public static class PauseJobStorageExtensions
{
    public static void Pause(this IStorageConnection connection, Type type)
    {
        if (connection == null) throw new ArgumentNullException("connection");
        if (type == null) throw new ArgumentNullException("type");

        using (var transaction = connection.CreateWriteTransaction())
        {
            transaction.AddToSet("paused-jobs", type.Name);
            transaction.Commit();
        }
    }

    public static void Resume(this IStorageConnection connection, Type type)
    {
        if (connection == null) throw new ArgumentNullException("connection");
        if (type == null) throw new ArgumentNullException("type");

        using (var transaction = connection.CreateWriteTransaction())
        {
            transaction.RemoveFromSet("paused-jobs", type.Name);
            transaction.Commit();
        }
    }
}

class Program
{
    [CanBePaused]
    static void Main()
    {
        var storage = new SqlServerStorage("connection_string");
        var client = new BackgroundJobClient(storage);

        client.Enqueue(() => Program.Main());

        using (var connection = storage.GetConnection())
        {
            connection.Pause(typeof(Program));
            connection.Resume(typeof(Program));
        }
    }
}