friendica非常依赖worker进程来完成跟其他实例通讯,清理数据库,联系人同步等其他任务。
它可以通过cron计划任务定时工作,也可以通过守护进程进行完成。设置好守护进程可以立即发送任务,而不是等几分钟cron计划任务开始工作。
假设,系统是Ubuntu20.04 friendica的安装目录是/var/www/fedibar/
按照官方提供的教程运行 cd /var/www/fedibar/ php bin/daemon.php start
时它会在 /run 目录创建一个PID。friendica会使用config/local.config.php
文件system 下的pidfile目录配置。
'system' > [
...
'pidfile' => '/run/friendica/daemon.pid',
...
],
我们将设置 systemd 以www-data
用户身份运行该进程。但是只有root权在该/run
目录中。所以我们创建一个 Friendica 指定的拥有www-data
的子目录。当然可以手动创建,但是重启就消失。因此我们通过/etc/tmpfiles.d
中的配置文件来执行此操作。首先通过命令在该目录创建 friendica.conf
sudo nano /etc/tmpfiles.d/friendica.conf
复制粘贴以下文件
d /run/friendica 0755 www-data www-data -
保存退出,这就systemd 可以通过www-data 用户组操作/run/friendica 的文件了。
如果现在执行
cd /var/www/fedibar/ php bin/daemon.php start
你会看到类似 信息
Starting worker daemon.
Child process started with pid 1276.
如果不是,您可能在config/local.config.php
文件的 pidfile 目录填写错误了。
如果没有问题现在可以创建systemd文件了。
sudo nano /etc/systemd/system/friendica-daemon.service
复制粘贴以下文件
[Unit]
Description=Friendica daemon
After=network.target mariadb.service
Requires=network.target remote-fs.target nss-lookup.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/fedibar
Type=simple
StandardOutput=null
StandardError=syslog
ExecStart=/usr/bin/php ./bin/daemon.php start
ExecStop=/usr/bin/php ./bin/daemon.php stop
PIDFile=friendica/daemon.pid
PrivateTmp=true
InaccessibleDirectories=/home /root /boot /opt /mnt /media
ReadOnlyDirectories=/etc /usr
Restart=always
[Install]
WantedBy=multi-user.target
请注意,如果您使用的是MySQL 那第二行改成
After=network.target mysql.service
还有注意检查 WorkingDirectory 这是你安装friendica的目录。
确认没有问题后重新加载systemd配置
sudo systemctl daemon-reload
然后可以通过systemd启动守护进程了
sudo systemctl start friendica-daemon.service
检查状态
systemctl status friendica-daemon.service
开机自动启动
systemctl enable friendica-daemon.service
搞定!