}
if (arg_unit) {
- switch (unit_name_to_type(arg_unit)) {
+ UnitType t = unit_name_to_type(arg_unit);
+
+ switch (t) {
case UNIT_SERVICE:
service = strdup(arg_unit);
return log_error_errno(r, "Failed to change unit suffix: %m");
break;
+ case UNIT_PATH:
+ case UNIT_SOCKET:
case UNIT_TIMER:
+ if (!streq(suffix + 1, unit_type_to_string(t)))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "Specified unit '%s' does not match requested %s trigger.",
+ arg_unit, suffix + 1);
+
trigger = strdup(arg_unit);
if (!trigger)
return log_oom();
grep -qE "^ExecStart=.*true.*$" "/run/systemd/transient/$UNIT.service"
systemctl stop "$UNIT.path" "$UNIT.service" || :
+UNIT="path-explicit-$RANDOM.path"
+SERVICE="${UNIT%.path}.service"
+systemd-run --remain-after-exit \
+ --unit="$UNIT" \
+ --path-property=PathExists=/tmp \
+ true
+systemctl cat "$UNIT" "$SERVICE"
+grep -q "^PathExists=/tmp$" "/run/systemd/transient/$UNIT"
+grep -qE "^ExecStart=.*true.*$" "/run/systemd/transient/$SERVICE"
+systemctl stop "$UNIT" "$SERVICE" || :
+
: "Transient socket unit"
UNIT="socket-0-$RANDOM"
systemd-run --remain-after-exit \
grep -qE "^ExecStart=.*true.*$" "/run/systemd/transient/$UNIT.service"
systemctl stop "$UNIT.socket" "$UNIT.service" || :
+UNIT="socket-explicit-$RANDOM.socket"
+SERVICE="${UNIT%.socket}.service"
+systemd-run --remain-after-exit \
+ --unit="$UNIT" \
+ --socket-property=ListenFIFO=/tmp/socket-explicit.fifo \
+ true
+systemctl cat "$UNIT" "$SERVICE"
+grep -q "^ListenFIFO=/tmp/socket-explicit.fifo$" "/run/systemd/transient/$UNIT"
+grep -qE "^ExecStart=.*true.*$" "/run/systemd/transient/$SERVICE"
+systemctl stop "$UNIT" "$SERVICE" || :
+
UNIT="socket-no-block-$RANDOM"
systemd-run --no-block --collect \
--unit="$UNIT" \