Multiprocessor systems are increasingly deployed in real-time applications, where reliability, energy consumption, and makespan are often the main scheduling objectives. In this work, we investigate dynamic scheduling of tasks modelled by directed acyclic graphs (DAGs), which is an NP-hard problem with all existing methods being heuristics. Our contributions have two steps: (i) Assuming that the allocation of DAG nodes to processors is given, we propose OEA (Optimal Energy Allocation) and SOEA (Search-based OEA)-the first optimal methods that minimise the energy consumption whilst satisfying the reliability requirement-for homogeneous and heterogeneous systems, respectively; (ii) We present a novel scheduling algorithm ODS (Out-Degree Scheduling) that allocates the DAG nodes according to their out-degrees, and considering energy consumption, reliability, as well as dynamic finish time. ODS dominates the widely applied HEFT (Heterogeneous Earliest Finish Time) in makespan. Combining SOEA with ODS makes a complete solution to the problem of dynamic DAG scheduling on multiprocessor systems, and achieves generally better results compared to the existing approaches. Specifically, in most cases, we are better on all the three objectives, i.e., reliability, energy as well as makespan, and in other cases we are better on some of the objectives.