写了个 sh 内容如下
#!/bin/bash
cd /srv/FileServerWeb
nohup ./FileServerWeb > /dev/null 2>&1 &
在 ssh 进入目录下执行./xxx.sh 可以执行成功 但是放到 crontab 定时里,却执行不成功,是我哪里写的有问题吗,请大佬指正,十分感谢
crontab 定时格式如下

/srv/FileServerWeb/xxx.sh

绝对路径

大佬能举个例子不,感谢

把路径写完就是了crontab 执行的适合环境和用户自己自己执行时不一样

就是没有搞明白这个问题,不知道该怎么写了

请问下有没有其他的定时方式达到用户自己执行的效果,感谢

如果你的脚本依赖于相对路径, 那就在脚本入口添加 cd 命令如#!/bin/env bashset -ecd $WORING_DIRECTORY......然后在 crontab 中使用绝对路径调用启动脚本

可以选择 systemd timer 比较强大/灵活

好的,感谢解答,我去尝试下

x x x x x /bin/bash xxx.sh

这样写的话 ,请问路径不用写的吗

同学,这个问题是这样的,比如你的 xxx.sh 脚本里面有这样的话ls cat xxx反正就是命令,那 shell 是如何去找这些命令的呢?答案是 PATH 变量,你可以 echo $PATH 看一下里面的路径一个用户登录系统的时候一般 PATH 变量都是系统给你初始化好了,所以你可以直接敲 ls,而不是/bin/ls但是 crontab 里面是没人帮你设置 PATH 变量的,所以会出现命令找不到的情况所以一般做法是在 xxx.sh 开头会写上export PATH= balbablabss

感谢解答,让我明白他的运行方式,刚接触脚本和定时有些定时脚本就能执行,有些不行就很纳闷,感谢,那请问下,/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.dotnet/tools:/root/.dotnet/tools/:/root/bin 按照您的回复我查询了下变量,请问下如果我要执行问题中的脚本,我是需要添加变量,还是引入变量,小白问题勿怪哈,能帮忙写下吗,我能参考学习起来可能更快,感谢

变量的意思,我拿宝塔面板来理解的话,是不是说输入 bt 就会有菜单出现,也是安装时写入的变量吧,定义了 bt 的路径,意思也就是说在.sh 里我也要给它相应的变量路径,能这么理解吗

#13 你一个宝塔面板启动的时候会继承当前进程里面的环境变量,当然也包括了 PATH 变量程序依赖 PATH 变量去寻找对应的命令

这种问题感觉特别适合 GPT 回答。很多类似问题我也是找 GPT ,挺方便的,推荐下和 GPT 结对开发。

假设所有环境变量写在/etc/profile ,可以在 crontab 里 source 执行。0 1 * source /etc/profile;/bin/bash /path/xx.sh > /dev/null 2>&1 &

确实,不过我发现这个执行文件也需要配置环境

感谢,都没你这个回复直观

首先你这个假设就不对其次 profile 是为 login shell 提供环境的。non login 不应该用这个

作为一名非专业运维,一般我是单独给一个目录放 crontab 的文件如 /opt/shell/xxx.sh在 xxx.sh 里头只有一个原则,所有路径要写全,比如#!/bin/bash cd /srv/FileServerWeb nohup ./FileServerWeb > /dev/null 2>&1 &改写成#!/bin/bashpushd /path/to/your-service-folder/./xxx.sh > /dev/null 2>&1 &