[pfx] Re: warning: /usr/lib/postfix/sbin/virtual: bad command startup -- throttling

David Koski via Postfix-users <[email protected]> Fri, 29 May 2026 16:57:14 -0700
Newsgroups gmane.mail.postfix.user
Message-ID <[email protected]>

On 5/29/26 8:15 AM, Wietse Venema via Postfix-users wrote:
> David Koski via Postfix-users:
>> Hello,
>>
>> 2026-05-24T00:51:43.849893-07:00 B914839 postfix/virtual[42763]: fatal:
>> bad string length 0 < 1: virtual_mailbox_base =
> That explains why the virtual daemon was unhappy. It does not explain
> why the daemon was used at all; that ould require further information
> about the Postfix configuration.
>
>> Note that I have since then added to main.cf:
>>
>> virtual_mailbox_base = /var/lib/vmail
>>
>> But I'm not sure why it is needed if it has no impact on mail delivery
>> but the error has gone away.
>>
>> Viktor Dukhovni: The error is gone by adding the above configuration.
>> Viktor Dukhovni: The virtual process appears to be failing but
>> everything is virtual, not local. I am using LMTP if that makes a
>> difference.
>>
>> postconf reveals:
>> local_transport = local:$myhostname
>> relay_transport = relay
> To find the answer:
>
> - Did the crash happen while receiving and delivering email?
>
>      - If yes:
>
>          - What was the domain portion of the recipient address?

I see no connection to mail sending or delivering.

>
> - What is the output from:
>
>      postconf -x mydestination local_transport

# postconf -x mydestination local_transport
mydestination =
local_transport = local:mail.sutinen.com

>
>      postconf -x virtual_alias_domains

# postconf -x virtual_alias_domains
virtual_alias_domains = 
proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf 
proxy:mysql:/etc/postfix/mysql_virtual_user_maps.cf

>
>      postconf -x virtual_mailbox_domains virtual_transport

# postconf -x virtual_mailbox_domains virtual_transport
virtual_mailbox_domains = 
proxy:mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_transport = virtual

Now that looks suspicious.  Note that all users with local delivery (not 
SMTP, relay, etc.) use dovecot-lmtp.  This is achieved by the SQL query 
for the user, joined to the transport configuration in SQL.  So it is 
delivered correctly via the transport mechanism. That explains why it 
works.  The virtual_transport setting is never used.  What is the 
correct method to stop postfix from executing virtual?  Do I need to 
remove it from master.cf?

Explanation:  This server supports split domains and its configuration 
makes it easy to add users without specifying a transport as it falls 
back to a default with scripts to manage configuration:

; Use default transport, configured for local lmtp.
# vuseradd [email protected]

; Query user hosted locally.
# vuserlist -e [email protected]
+-----------------+-------+-----------------+-------------+--------+
| email           | crypt | transport_alias | description | enable |
+-----------------+-------+-----------------+-------------+--------+
| [email protected] |     1 | default         | Imported    |      1 |
+-----------------+-------+-----------------+-------------+--------+

; Query for trasport like postfix via "transport_maps = 
proxy:mysql:/etc/postfix/mysql_transport_maps.cf"
# vtransportlist -u -a -q [email protected]
+-----------------+--------------------------------+
| tkey            | transport                      |
+-----------------+--------------------------------+
| [email protected] | lmtp:unix:private/dovecot-lmtp |
+-----------------+--------------------------------+

; Add account with not default transport
# vuseradd [email protected] -t kosmos

; Show transport alias for user.
# vuserlist -e [email protected]
+--------------------+-------+-----------------+-------------+--------+
| email              | crypt | transport_alias | description | enable |
+--------------------+-------+-----------------+-------------+--------+
| [email protected] |     1 | kosmos          | Imported    |   1 |
+--------------------+-------+-----------------+-------------+--------+

; Map alias to transport.
# vtransportaliaslist
+-----------------+--------------------------------------------------------+
| alias           | transport         |
+-----------------+--------------------------------------------------------+
| kosmos          | smtp:[mail.kosmosisland.com]:587          |
+-----------------+--------------------------------------------------------+

; Query for transport.  This is what postfix does.
# vtransportlist -u -a -q [email protected]
+--------------------+----------------------------------+
| tkey               | transport                        |
+--------------------+----------------------------------+
| [email protected] | smtp:[mail.kosmosisland.com]:587 |
+--------------------+----------------------------------+

>
>      postconf -x relay_domains relay_transport

# postconf -x relay_domains relay_transport
relay_domains = hash:/var/lib/mailman3/data/postfix_domains
relay_transport = relay

>
> - What is the output from:
>
>      postconf -M local/unix virtual/unix relay/unix

# postconf -M local/unix virtual/unix relay/unix
relay      unix  -       -       y       -       -       smtp -o 
syslog_name=postfix/$service_name
local      unix  -       n       n       -       -       local
virtual    unix  -       n       n       -       -       virtual

>
> Eventually we'll find out why some email ends up going to the virtual
> delivery agent, or if it that daemon is being run for other reasons
> (like, the automatic wakeup feature is enabled).
>
> 	Wietse
> _______________________________________________
> Postfix-users mailing list -- [email protected]
> To unsubscribe send an email to [email protected]

_______________________________________________
Postfix-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]