Как мне запланировать запуск корневой команды через определенные промежутки времени?

1

Мне нужно запускать скрипт с интервалами, требующими выполнения пользователем root. Я создал список, который будет вызывать скрипт ~/bin/test.sh.

user@MBP:~$ ls -lah ~/bin/
-rw-r--r--   1 root       staff   566B Feb  6 23:44 test.plist
-rwxr-xr-x   1 root       staff    51B Feb  6 23:38 test.sh

Вот содержимое:

user@MBP:~$ cat ~/bin/test.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.test.script</string>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>/Users/user/bin/test.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>30</integer>
</dict>
</plist>

user@MBP:~$ cat ~/bin/test.sh
#!/bin/sh
cp /Users/user/bin/dummy.txt /etc

Затем я вставил ссылку в список /Library/LaunchAgents.

user@MBP:~$ ls -lah /Library/LaunchAgents/
lrwxr-xr-x   1 root  wheel    31B Feb  5 06:28 com.test.script.plist -> /Users/user/bin/test.plist

Но все это не работает. Когда я смотрю на /var/logs/system.logэто просто сказать:

Feb  7 14:42:12 MBP com.apple.launchd.peruser.501[242] (com.test.script`[925]): Exited with code: 1
МПТП
источник
Спасибо! Узнал о / Library / LaunchDaemons, работающем от имени root самостоятельно, всего пару минут назад. :)
mptp

Ответы:

1

Страница руководства для launchd.plistописывает UserNameключ, который требуется при запуске задания от имени пользователя root. Предположительно, значение должно быть «root».

Я не гуру, но это, кажется, единственное, что вам не хватает - если агенты запуска не могут быть символическими ссылками.

Тайлер Уэйн
источник
0

Таким образом, согласно этому ответу SuperUser , вы должны запустить launchctl от имени sudo, чтобы сохранить права доступа.

sudo load -w /Library/LaunchDaemons/com.apple.samplelaunchdscript.plist
пис
источник
0

Списки свойств в LaunchAgents также работают, но вы должны загрузить как агентов, так и демонов с помощью sudo:

sudo chown root ~/bin/test.plist
sudo launchctl load /Library/LaunchAgents/test.plist

Если у plist нет ключа Disabled, он загружается автоматически при следующем входе в систему или перезапуске, и -w не требуется.

LRI
источник