我是脚本和守护程序的新手,玩了一段时间后,发现自己卡住了。
情况如下:在 macOS 上,我有一个名为“maza”的程序,它使用在线阻止列表更新我的主机文件。我想运行这个程序,比如说,每周一次,以跟上阻止列表的变化。在尝试了 cronjobs 的运气(没有用)之后,我现在正在尝试使用守护进程。所以我有:
- 一个名为 com.mazaupdate.plist 的文件位于 /Library/LaunchDaemons
- 一个名为 scriptmaza.sh 的脚本位于 /etc 中(因为这是主机文件所在的位置)
我的 plist 说明了以下内容(基本上它试图启动脚本 - 此时每 60 秒一次,用于测试目的)。
<?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.mazaupdate</string>
<key>ProgramArguments</key>
<array>
<string>/etc/scriptmaza.sh</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
我的脚本如下(它只是停止 maza,这比“更新”更容易测试,因为目前没有对主机文件进行在线更新)。
#!/bin/sh
sudo maza stop
测试结束后,plist 将修改为仅每周启动脚本,脚本将更新为“maza update”。
有了我的两个文件,我会:
sudo chown root /Library/LaunchDaemons/com.mazaupdate.plist
sudo chgrp wheel /Library/LaunchDaemons/com.mazaupdate.plist
和
sudo launchctl load com.mazaupdate.plist
但是,当我在几分钟后测试 maza 的状态时,它总是说“启用”,这意味着停止命令没有正确使用。当然,如果我只是在终端中使用“sudo maza stop”,maza 会正确停止并且状态变为“禁用”,如果脚本有效,应该是这种情况。
这就是我所拥有的一切。任何想法?谢谢!肯
编辑:
在下面@pmdj 的评论之后,这就是我们的立场。
在 scriptmaza.sh 上 chmod +x 后,权限为:-rwxr-xr-x@ 1 ken wheel 80 17 Feb 12:22 /etc/scriptmaza.sh
修改后的 scriptmaza.sh 现在是:
#!/bin/sh
/usr/local/bin/maza stop
date >> /Users/Ken/Downloads/file.dat
加载守护程序一段时间后,file.dat 确实会每分钟创建并编辑一次,并使用正确的日期,这意味着守护程序确实会启动脚本。
控制台显示正在正确加载和卸载的守护进程,并且 scriptmaza 记录了许多行,上面写着“tput:$TERM 没有值并且没有指定 -T”
同时,maza 的状态仍然是“启用”。