Chicago rallied from an early three-run deficit to tie it at 4-4 in the top of the sixth, but the Cardinals then pulled away in the late innings to win for just the fourth time in 14 games.
Cruz doubled with two away in the sixth off Blake Parker (1-2) and came in on Kozma's single to center. Jon Jay added a sacrifice fly in the seventh and the Cardinals came up with RBI doubles from both Matt Carpenter and Allen Craig in the eighth.
St. Louis piled up 13 hits to avoid a three-game sweep at the hands of the Cubs.
Randy Choate (2-1) retired the only batter he faced in the top of the sixth and became the winner when St. Louis scored in the bottom half of the inning. Edward Mujica turned in a two-inning effort to record his 31st save.