我在 CentOS 5.8 服务器上使用 Sass,并希望它在 SSH 注销后继续运行,以便其他用户可以在未来几天甚至几周内编辑 *.scss 文件,而无需在每次登录时启动该程序(事实上,他们甚至没有 SSH 访问权限)。
我使用了以下命令问题/答案:
$ nohup sass --watch 路径/到/scss/文件:路径/到/css/输出/文件&
然后,我退出 SSH 会话,进程继续运行。前几分钟一切正常(再次登录并使用 touch 创建测试文件 (test.scss) 会正确触发创建相应的 test.css 文件),但过了一会儿,*.scss 文件停止编译...但是,
$ ps aux |删除 'sass'
表明该进程仍在运行。
有人知道我做错了什么吗?
编辑:这是我从 nohup.out 获得的输出:
/usr/local/rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/yaml.rb:56:in `': 看来你的 ruby 安装缺少 psych(用于 YAML 输出)。 为了消除此警告,请安装 libyaml 并重新安装 ruby。 >>> Sass 正在监视更改。按 Ctrl-C 停止。 >>> 检测到新模板: /主页/*/站点/所有/主题/测试.scss 覆盖 private_html/sites/all/themes//test.css >>> 检测到已删除的模板: /主页/*/站点/所有/主题/测试.scss
YAML 相关错误似乎与问题无关,因为 Sass 在短时间内正常工作。即使进程仍在运行,它也会在某些时候默默停止工作...
答案1
呃,听起来是个烦人的问题。nohup 可能存在问题,因为它被广泛使用、成熟且简单。无论如何,我们都要消除它。我们也在消除进程的背景问题。
打开屏幕...确实如此screen
不使用 nohup 运行命令,但让我们将其记录到某处
sass --watch path/to/scss/files:path/to/css/output/files 2>&1 | tee sass.log
2>&1 确保我们获取 STDERR 和 STDOUT,同时 tee 将日志分叉到磁盘
现在拆下你的屏幕:ctrl+a d
注销,重新登录,看看是否有区别。由于 sass.log 已运行,因此无需重新连接到屏幕,但您可以使用 来执行此操作screen -r
。