diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Monit/forms/services.xml b/src/opnsense/mvc/app/controllers/OPNsense/Monit/forms/services.xml
index d35ec9c7d..5b2b44c1a 100644
--- a/src/opnsense/mvc/app/controllers/OPNsense/Monit/forms/services.xml
+++ b/src/opnsense/mvc/app/controllers/OPNsense/Monit/forms/services.xml
@@ -35,6 +35,13 @@
text
+
+ monit.service.timeout
+
+ text
+ true
+
+
monit.service.address
diff --git a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml
index dc67c30c1..1b5afabb0 100644
--- a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml
@@ -214,6 +214,13 @@
/^(\/[^\/ ]*)+\/?.*$/
Should be a valid absolute file or folder path.
+
+ 300
+ N
+ 1
+ 86400
+ Program Timeout needs to be an integer value between 1 and 86400>
+
N
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-4]|2[0-5][0-9]|[01]?[0-9][0-9]?)$/
diff --git a/src/opnsense/mvc/app/views/OPNsense/Monit/index.volt b/src/opnsense/mvc/app/views/OPNsense/Monit/index.volt
index 4319996b2..277d6d7b0 100644
--- a/src/opnsense/mvc/app/views/OPNsense/Monit/index.volt
+++ b/src/opnsense/mvc/app/views/OPNsense/Monit/index.volt
@@ -196,6 +196,7 @@ POSSIBILITY OF SUCH DAMAGE.
$('tr[id="row_monit.service.pidfile"]').addClass('hidden');
$('tr[id="row_monit.service.match"]').addClass('hidden');
$('tr[id="row_monit.service.path"]').addClass('hidden');
+ $('tr[id="row_monit.service.timeout"]').addClass('hidden');
$('tr[id="row_monit.service.address"]').addClass('hidden');
$('tr[id="row_monit.service.interface"]').addClass('hidden');
$('tr[id="row_monit.service.start"]').removeClass('hidden');
@@ -238,6 +239,7 @@ POSSIBILITY OF SUCH DAMAGE.
break;
default:
$('tr[id="row_monit.service.path"]').removeClass('hidden');
+ $('tr[id="row_monit.service.timeout"]').removeClass('hidden');
}
};
$('#DialogEditService').on('shown.bs.modal', function() {ShowHideFields();});
@@ -245,6 +247,7 @@ POSSIBILITY OF SUCH DAMAGE.
$('#monit\\.service\\.pidfile').on('input', function() {ShowHideFields();});
$('#monit\\.service\\.match').on('input', function() {ShowHideFields();});
$('#monit\\.service\\.path').on('input', function() {ShowHideFields();});
+ $('#monit\\.service\\.timeout').on('input', function() {ShowHideFields();});
$('#monit\\.service\\.address').on('input', function() {ShowHideFields();});
$('#monit\\.service\\.interface').on('changed.bs.select', function(e) {ShowHideFields();});
diff --git a/src/opnsense/service/templates/OPNsense/Monit/monitrc b/src/opnsense/service/templates/OPNsense/Monit/monitrc
index 3971b6caf..bfb66e185 100644
--- a/src/opnsense/service/templates/OPNsense/Monit/monitrc
+++ b/src/opnsense/service/templates/OPNsense/Monit/monitrc
@@ -117,9 +117,13 @@ check {{ service.type }} {{ service.name }} {{ address }} {{ interface }}
{% elif service.type == 'system' %}
check {{ service.type }} {{ service.name }}
{% else %}
-{% set path = "with path " ~ service.path %}
+{% set path = "with path \"" ~ service.path ~ "\"" %}
{% if service.type == 'custom' %}
-check program {{ service.name }} {{ path }}
+{% set timeout = '' %}
+{% if service.timeout|default('0') != 0 %}
+{% set timeout = "timeout " ~ service.timeout ~ " seconds" %}
+{% endif %}
+check program {{ service.name }} {{ path }} {{ timeout }}
{% else %}
check {{ service.type }} {{ service.name }} {{ path }}
{% endif %}