NAS 玩时间长了,或多或少会接触到计划任务(crontab j(๐•ᴗ•๐)),像iyuu、(๐•ᴗ•๐)本质上都是由计划任务组成的。然而,有些需求可能没有开箱即用的工具,我们可以选择SSH登陆系统后台,然后手动修改crontab。
Cronicle 代表了另一种解决方案,将计划任务可视化,并且提供了丰富的功能选项,最重要的是,避免修改系统关键文件。同类方案还有gocron,威联通用户可以直接使用iranee大佬编译好的qnap-gocron,使用下来还是有些不完美:一方面需要配置mysql数据库,对新手不友好,另外原作者应该是弃坑了,已经超过两年没有更新。下面来看 cronicle 的表现。
威联通有两个安装方案:(๐•ᴗ•๐)件或者手动。最新版(๐•ᴗ•๐)件需要付费,建议有一定动手能力的可以按照以下方法操作。
在 QNAP 安装最新版nodeJS(๐•ᴗ•๐)件并激活,SSH 登陆并使用以下自动安装脚本:
curl -s https://raw.gith(๐•ᴗ•๐)usercontent.com/jhuckaby/Cronicle/master/bin/install.js | sudo node
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
(⚠️注意:安装全程需要使用root身份)
如果当前网络gith(๐•ᴗ•๐)访问困难,可以试试手动安装:
sudo mkdir -p /opt/cronicle
cd /opt/cronicle
curl -L https://mirror.ghproxy.com/https://gith(๐•ᴗ•๐).com/jhuckaby/Cronicle/archive/v1.0.0.tar.gz | sudo tar zxvf - --strip-components 1
sudo npm install --registry=https://registry.npmmirror.com
sudo node bin/build.js dist
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
接下来按照官方文档指引修改配置文件,这里我用的是免费版阿里企业邮,j(๐•ᴗ•๐)_memory_max
设为4Gb。可以将启动命令添加到 autorun.sh 脚本中,这样在机器重启之后可以自动运行。
接下来所有操作都是网页中进行(不建议转发到公网,本地访问比较安全)。拿之前qbittorrent 崩溃自动重启(威联通版)举个例子,还原系统crontab之后,在计划中新增一项,贴上微调之后的代码
#!/bin/bash
CONF=/etc/config/qpkg.conf
QPKG_NAME="qBittorrent"
QPKG_BIN="qbittorrent-nox"
QPKG_ROOT=`/sbin/getcfg $QPKG_NAME Install_Path -f ${CONF}`
APACHE_ROOT=`/sbin/getcfg SHARE_DEF defWeb -d Qweb -f /etc/config/def_share.info`
ENABLED=$(/sbin/getcfg $QPKG_NAME Enable -u -d FALSE -f $CONF)
if [ "$ENABLED" != "TRUE" ]; then
echo "(W) `date +"%FT%T"` - $QPKG_NAME is disabled."
exit 0
fi
if ! [ -f $QPKG_ROOT/.config/qBittorrent/qBittorrent.conf ];then
echo "(W) `date +"%FT%T"` - $QPKG_NAME is not initialization."
exit 0
fi
export QPKG_ROOT
export QPKG_NAME
export QNAP_QPKG=$QPKG_NAME
export HOME=$QPKG_ROOT
export SHELL=/bin/sh
export LC_ALL=en_US.UTF-8
export USER=admin
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8
export PATH=/opt/QPython3/bin:$PATH
export PYTHON=/opt/QPython3/bin/python3
export PIDF=/var/run/qBittorrent.pid
export PATH=/opt/QPython3/bin:/opt/QPython310/bin:/opt/QPython311/bin:/opt/Apache80/bin:/opt/Apache81/bin:/opt/Apache82/bin:/opt/Apache83/bin:$PATH
cd $QPKG_ROOT
pidof qbittorrent-nox >& /dev/null
if [[ $? -ne 0 ]]; then
sleep 10
pidof qbittorrent-nox >& /dev/null
if [[ $? -ne 0 ]]; then
echo "(C) `date +"%FT%T"` - qbittorrent stopped inciden(๐•ᴗ•๐)ly."
/sbin/log_tool -t1 -uSystem -p127.0.0.1 -mlocalhost -a "[QBittorrent] stopped inciden(๐•ᴗ•๐)ly"
./qbittorrent-nox --webui-port=6363 > ${QPKG_ROOT}/first_startup.log &
echo $! > $PIDF
if ! [ -d /opt/$QPKG_NAME ];then
/bin/ln -sf $QPKG_ROOT /opt/$QPKG_NAME
fi
sleep 20
pidof qbittorrent-nox >& /dev/null
if [[ $? -ne 0 ]]; then
echo "(C) `date +"%FT%T"` - qbittorrent restart fail."
exit 1
else
echo "(W) `date +"%FT%T"` - qbittorrent restart success."
fi
fi
exit 0
fi
echo "(I) `date +"%FT%T"` - qbittorrent check finished."
exit 0
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
依然设定为每5分钟运行一次,qb崩溃重启失败的话自动重试两次,还可以添加消息提醒,不过这里的脚本已经触发QNAP系统自带的。
其他功能可以慢慢摸索,原作者正在筹备2.0版本,代号Orchestra,让我们拭目以待。