The incident occurred around 8am when a tractor trailer struck the roadside maintenance vehicle from behind on the Route de Berne, between the village of Montpreveyres and Ropres, Vaud cantonal police said.
The driver of the maintenance vehicle, a 60-year-old local man, was ejected from the cab and suffered serious injuries, police said.
The 30-year-old man driving the truck, from the canton of Fribourg, died from the injuries he received shortly after arriving at the hospital.
A 13-year-old boy, also from Fribourg, who accompanied the truck driver was in serious condition after being thrown from the vehicle.
He was transported by helicopter to the university hospital in Lausanne (CHUV) for treatment.
The truck with a pup trailer was hauling merchandise for the Denner supermarket chain.
The cantonal road was closed to traffic all morning as emergency crews dealt with the collision.
An investigation has been launched to determine the causes of the crash.
Vaud police are seeking witnesses to help establish what happened.