Мне нужно запускать скрипт с интервалами, требующими выполнения пользователем 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
Ответы:
Страница руководства для
launchd.plist
описываетUserName
ключ, который требуется при запуске задания от имени пользователя root. Предположительно, значение должно быть «root».Я не гуру, но это, кажется, единственное, что вам не хватает - если агенты запуска не могут быть символическими ссылками.
источник
Таким образом, согласно этому ответу SuperUser , вы должны запустить launchctl от имени sudo, чтобы сохранить права доступа.
источник
Списки свойств в LaunchAgents также работают, но вы должны загрузить как агентов, так и демонов с помощью sudo:
Если у plist нет ключа Disabled, он загружается автоматически при следующем входе в систему или перезапуске, и -w не требуется.
источник