Systemd игнорирует RestartSec = 15s

В общем Правило, вы не просто меняете права доступа к системным каталогам! Вот для чего нужен root-доступ. Верните разрешения в исходное состояние и в следующий раз запустите sudo R и install.packages из получившейся корневой оболочки R.

Причина, по которой вы не можете установить, находится прямо в выводе, который вы показываете:

ERROR: dependencies ‘httr’, ‘git2r’ are not available for package ‘devtools’

Очевидно, как объяснил rcs , в Ubuntu вам необходимо установить libssl-dev Сначала и libcurl4-openssl-dev .


Следующая проблема заключается в том, что установка R вашего корневого пользователя имеет / usr / local / lib / R / site-library в качестве первого каталога в выходных данных .libPaths и что не находится на пути вашего обычного пользователя. Поскольку это первая запись для root, именно там и была установлена ​​ваша библиотека:

 Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)

Итак, простое решение - создать файл с именем ~ / .Rprofile и добавить к нему эту строку:

.libPaths("/usr/local/lib/R/site-library/")

В качестве альтернативы или дополнительно вы можете включить строку типа

   .libPaths("/home/masi/Rlibs")

, которая позволит вам устанавливать библиотеки в каталог / home / masi / Rlibs (выбирайте любое имя) в будущем и, таким образом, избегайте необходимости в судо R .


В качестве альтернативы вы можете установить для переменной среды R_LIBS_USER значение / usr / local / lib / R / site-library / (или / home / masi / Rlibs или там, где еще устанавливаются ваши библиотеки). Просто добавьте эту строку в свой ~ / .profile :

R_LIBS_USER=/usr/local/lib/R/site-library/

4
27.03.2017, 02:14
1 ответ

Я полагаю, что поведение, с которым вы столкнулись, вызвано зависимостью Requires=. Согласно разделу о Requires= из man systemd.unit:

Если один из других блоков деактивируется или его активация не удалась, этот блок будет деактивирован.

Похоже, что именно это здесь и происходит. Далее в параграфе есть совет, который, как мне кажется, применим в данном случае:

Часто лучше использовать Wants= вместо Requires=, чтобы добиться более надежной системы при работе с отказавшими сервисами.

В документации к Wants= сказано:

Более слабая версия Requires=. Блоки, перечисленные в этой опции, будут запущены, если конфигурирующий блок запущен. Однако, если перечисленные блоки не запускаются или не могут быть добавлены в транзакцию, это не влияет на валидность транзакции в целом. Это рекомендуемый способ связать запуск одного устройства с запуском другого.

Чтобы ответить по-другому: Я не думаю, что логика "RequireSec=" имеет шанс сработать, потому что systemd отключает службу, потому что условие "Require=" не выполняется.

Это мое предположение.

4
27.01.2020, 20:59

Теги

Похожие вопросы