If your msdb goes suspect then you have two choices, restore it from a
backup or recreate it (and then recreate any scheduled jobs). Obviously
everyone has a comprehensive and valid set of backups, right? If only...
Of course, the very first thing you do is work out why it went suspect
in the first place and take any necessary steps to stop it happening
again.
Now you'd hope that if you don't have a valid msdb backup then you can
at least run repair on it and so you don't lose everything in there.
Well, that works as long as the transaction log isn't damaged. Ok, but
then surely we can stick the database into the now-documented emergency
mode (alter database dbname set emergency) and run emergency mode repair? (dbcc checkdb (dbname, repair_allow_data_loss) in emergency mode). Nope, msdb can't be put into emergency mode.
So, you're out of options and you're going to have to recreate msdb.
Here's what to do (change the directory paths to suit your
installation):