Most resources don't need not_if/only_if. Templates are overriding a file so chef know whether it has to be replaced or not. On the other hand execute resource is not able to determine if it should run without only_if/not_if because it don't know what the command changes in the system. We have to explicitly tell him.