, используя import java.lang.reflect.*;
public static Object launchProcess(String className, String methodName, Class<?>[] argsTypes, Object[] methodArgs)
throws Exception {
Class<?> processClass = Class.forName(className); // convert string classname to class
Object process = processClass.newInstance(); // invoke empty constructor
Method aMethod = process.getClass().getMethod(methodName,argsTypes);
Object res = aMethod.invoke(process, methodArgs); // pass arg
return(res);
}
, и вот как вы его используете:
String className = "com.example.helloworld";
String methodName = "print";
Class<?>[] argsTypes = {String.class, String.class};
Object[] methArgs = { "hello", "world" };
launchProcess(className, methodName, argsTypes, methArgs);
systemd не поддерживает «базу данных» отключенного и включенного сервиса. Он просто использует символические ссылки в целевых каталогах, чтобы определить, включена служба или нет . Например. когда вы включаете службу, в подкаталоге target /etc/systemd/system/
создается символическая ссылка на файл модуля systemd (обычно multi-user.target.wants
). Вызов systemctl disable ...
просто удаляет эту символическую ссылку.
Для отгруженных поставщиков системного оборудования это немного сложнее, так как эти символические ссылки не находятся под вашим контролем (не уверен, если это так httpd
). Чтобы отключить эти сервисы, в /etc/systemd/system/...
должна быть создана символическая ссылка, указывающая на /dev/null
, названный системным сервисным модулем, чтобы «замаскировать» реальную ссылку на сервис где-то в /lib/systemd...
посредством ложной ссылки с более высоким приоритетом в /etc/systemd...
. Я не уверен, что только голый systemctl disable <vendor-unit>
делает это.
Функция enable
и disable
описана здесь: https://www.freedesktop.org/software/systemd/man/systemctl.html#enable%20UNIT%E2%80%A6 [1111 ]