jellyfin/jellyfin · error · ArgumentException
Unrecognized trigger type: {info.Type}
Error message
Unrecognized trigger type: {info.Type} What it means
Thrown by ScheduledTaskWorker.GetTrigger when info.Type doesn't match any known trigger type constant (DailyTrigger, WeeklyTrigger, IntervalTrigger, StartupTrigger). ArgumentException signals an unrecognized/unsupported trigger type string. This is the fallthrough after all known type branches.
Source
Thrown at Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs:659
return new WeeklyTrigger(TimeSpan.FromTicks(info.TimeOfDayTicks.Value), info.DayOfWeek.Value, options);
}
if (info.Type == TaskTriggerInfoType.IntervalTrigger)
{
if (!info.IntervalTicks.HasValue)
{
throw new ArgumentException("Info did not contain a IntervalTicks.", nameof(info));
}
return new IntervalTrigger(TimeSpan.FromTicks(info.IntervalTicks.Value), options);
}
if (info.Type == TaskTriggerInfoType.StartupTrigger)
{
return new StartupTrigger(options);
}
throw new ArgumentException("Unrecognized trigger type: " + info.Type);
}
/// <summary>
/// Disposes each trigger.
/// </summary>
private void DisposeTriggers()
{
foreach (var triggerInfo in InternalTriggers)
{
var trigger = triggerInfo.Item2;
trigger.Triggered -= OnTriggerTriggered;
trigger.Stop();
if (trigger is IDisposable disposable)
{
disposable.Dispose();
}
}
}View on GitHub (pinned to ae8723026d)
Solutions
- Correct the trigger Type in the task config to a known value: DailyTrigger, WeeklyTrigger, IntervalTrigger, or StartupTrigger.
- Ensure case matches the TaskTriggerInfoType constants exactly.
- If the config came from a newer server, upgrade or remove the unsupported trigger.
- Re-create the trigger via the UI/API so only supported types are produced.
Example fix
// before
var info = new TaskTriggerInfo { Type = "daily" }; // wrong casing/value
// after
var info = new TaskTriggerInfo
{
Type = TaskTriggerInfoType.DailyTrigger,
TimeOfDayTicks = TimeSpan.FromHours(2).Ticks
}; Defensive patterns
Strategy: validation
Validate before calling
var known = new[] { TaskTriggerInfoType.DailyTrigger, TaskTriggerInfoType.WeeklyTrigger, TaskTriggerInfoType.IntervalTrigger, TaskTriggerInfoType.StartupTrigger };
if (!known.Contains(info.Type))
throw new InvalidOperationException($"Unknown trigger type: {info.Type}"); Type guard
static bool IsKnownTriggerType(string type)
=> type is TaskTriggerInfoType.DailyTrigger or TaskTriggerInfoType.WeeklyTrigger
or TaskTriggerInfoType.IntervalTrigger or TaskTriggerInfoType.StartupTrigger; Try / catch
try { var trigger = GetTrigger(info); }
catch (ArgumentException ex) when (ex.Message.Contains("Unrecognized trigger type"))
{ _logger.LogError("Unsupported trigger type {Type}; removing trigger", info.Type); } Prevention
- Use only supported trigger type constants.
- Match casing exactly against TaskTriggerInfoType values.
- If migrating from a newer server, remove unsupported triggers or upgrade.
When it happens
Trigger: Loading a scheduled task whose TaskTriggerInfo.Type is a string not equal to any of the known TaskTriggerInfoType constants. Comes from a config file with a typo'd or future/unknown trigger type.
Common situations: Typo in the trigger type string in the task config; a config from a newer server version with a trigger type this version doesn't know; hand-edited config with a wrong casing; plugin/custom trigger types not handled by this factory.
Related errors
- Info did not contain a TimeOfDayTicks.
- Info did not contain a DayOfWeek.
- Info did not contain a IntervalTicks.
- The custom database provider must declare the custom provide
- {0} does not exist.
AI-assisted analysis of jellyfin/jellyfin@ae8723026d (2026-08-13).
Data as JSON: /api/errors/9bb3a63e477bff15.
Report an issue: GitHub.